在 Python 中从同一 df 中的字典项创建单独的列

Making seperate columns from dictionary items in the same df in Python

我有一个巨大的推特数据框 (9530232x19)。第一列包括字典。我想在同一个 df 中从该字典项目中创建单独的列。另外,我在 'entities' 列中有一本字典,我想对其进行类似的分隔。 我想将指标添加为四个新列,例如 'rtcount'、'reply_count'、'like_count' 和 'quote_count',以及实体 ['htype'] 作为新列在我现有的 df 的右侧,无需创建任何更多数据帧,因为这个大 df 几乎使用了我所有的 16 GB RAM 并且偶尔会崩溃。我知道对这个大的 df 使用 for 循环不是一种有效的方法,但我不知道如何去做。
非常感谢任何帮助。

htypedf=[]
t=[]
for i in range(0,len(d)):
    if i%100==0:
        print(i)
    htype=[]
    hasht=[]
    t=d[i:i+1]
    metrics=pd.Series(t['public_metrics'][0]).to_frame().T
    try:
        htype=list(map(lambda x : x['type'], t['entities'][0]['annotations']))
    except:
        htype=('NaN')

    d.iloc[i] = pd.concat([t, metrics, pd.DataFrame({'htype': [htype]})],axis=1)

代替你的 for 循环,试试这个:

d = pd.concat([t.drop['public_metrics'], t['public_metrics'].apply(pd.Series)], axis=1)

类似的概念可用于获取 htype,但处理方式将取决于您希望如何保留数据。如果您 想要实体列中的 htype,您可能会尝试以下操作:

d = pd.concat([t.drop['entities'], t['entities'].apply(pd.Series)['htype']], axis=1)

除了新的 htype 列之外,要保留 entities 列,您应该能够改用以下代码(只需删除 drop 函数):

d = pd.concat([t, t['entities'].apply(pd.Series)['htype']], axis=1)

让我知道这对您有何作用!

新代码块:

def fetch_htype(row):
    entities_dict = row['entities']
    if np.isnan(entities_dict):
        return pd.Series(data = '', index = ['htype'])
    else:
        return pd.Series(data = entities_dict['htype'], index = ['htype'])

d = pd.concat([d, t.apply(fetch_htype)], axis=1)