猿问

将一系列 dict 和 concat 转换为数据帧

我的数据框


                             Items  Count  ScannedCount  

0  {'comp': {'S': '2019-08-02'}...   1032          1032 

1  {'comp': {'S': '2019-08-27'}...   1032          1032  

项目系列看起来像这样


{'comp': {'S': '2019-08-02T16:54:55.035196+03:00'}, 'ID': {'S': '336'}, 'dID': {'S': '1763523'}, 'fname': {'S': '558012'}}

使用这篇文章的第二个答案允许我将系列转换为数据框。问题是如何扩展该操作,因为它发生在每一行,


目前的做法:


循环遍历每一行并将它们连接成一个系列(非常慢)


item_df = pd.DataFrame(df['Items'].iloc[i]) for i in range(df.shape[0])]).reset_index(drop=True), df], axis=1)

将结果与原始数据框连接起来


df = pd.concat([temp, df], axis=1)


我相信for第一部分的循环是瓶颈。有没有更快的方法将系列转换为数据帧并将其连接回原始数据帧。


预期输出:


                 comp   ID  dID      fname   Count  ScannedCount  

0  2019-08-02T16:54:55  336 1763523  548012  1032   1032

1  2019-09-01T14:52:24  336 1763523  528012  1032   1032


芜湖不芜
浏览 94回答 3
3回答

呼如林

试试这个更柱状的解决方案。它假设字典中总是有“S”键。df_tmp = df['Items'].apply(pd.Series)for c in df_tmp.columns:    df[c] = df_tmp[c].apply(lambda x: x.get('S'))df = df.drop(columns='Items')

眼眸繁星

看起来迭代所有 df 是不可避免的。我不确定它是否更好,但我知道 pandas 这样做的方式是使用iterrows().在文档中,他们还提到itertuples()了特定用例,但同样,我在这里不是专家。希望这可以帮助!

饮歌长啸

测试数据:import pandas as pdtest_data = {'item' : [{'comp': {'S': '2019-08-02T16:54:55.035196+03:00'}, 'ID': {'S': '336'}, 'dID': {'S': '1763523'}, 'fname': {'S': '558012'}}, {'comp': {'S': '2019-09-02T16:54:55.035196+03:00'}, 'ID': {'S': '336'}, 'dID': {'S': '1763523'}, 'fname': {'S': '558012'}}], 'Count': [1032,1032], 'ScannedCount':[1032,1032]}df = pd.DataFrame.from_dict(test_data)Out[64]:                                                      item  Count  ScannedCount    0  {'comp': {'S': '2019-08-02T16:54:55.035196+03:...   1032          1032    1  {'comp': {'S': '2019-09-02T16:54:55.035196+03:...   1032          1032据我了解,你试图得到这样的东西:def extract(row):    item_series = pd.Series({k:v for k,v in row['item'].items()})    result = row.append(item_series)    return resultdf = df.apply(extract, axis = 1)这给了你:Out[67]:                                             comp            ID               dID  \    0  {'S': '2019-08-02T16:54:55.035196+03:00'}  {'S': '336'}  {'S': '1763523'}       1  {'S': '2019-09-02T16:54:55.035196+03:00'}  {'S': '336'}  {'S': '1763523'}                fname      0  {'S': '558012'}      1  {'S': '558012'}  ## skipped some columns for clarity
随时随地看视频慕课网APP

相关分类

Python
我要回答