我有一个数据框,其中有一列称为动作,并带有字典列表。格式为{source:int,action:string},我需要将其解析为每个新列,但是每个操作单元格中的记录数是可变的。
数据如下所示:
|Id |action |
|1 |[{"E": 4, "action": "views"}, {"A": 58, "action": "views"}]|
|2 |[{"A": 74, "action": "clicks"}] |
我希望它看起来像这样:
|Id|Source|Value|Action|
|1 |E |4 |views |
|1 |A |58 |views |
|2 |A |74 |clicks|
“操作”列中的词典数量最多为10
我已经尝试过几种解决方案,例如pandas DataFrame: normalize one JSON column and merge with other columns
但是它告诉我第一个解决方案未正确调用DataFrame,第二个解决方案的str没有属性值。甚至除此之外,这不是我需要的解决方案,因为我需要重命名列源并将A / E / etc值放入其中。
最佳答案
只需使用列表理解来重建您的DataFrame数据:
更新:action
列是一个字符串字段,而不是Python数据结构。您可以使用json.loads对其进行预处理,这在从字符串中解析数据结构方面不易出错。
import json
# original dataframe
df = pd.DataFrame([
(1, '[{"E": 4, "action": "views"}, {"A": 58, "action": "views"}]')
, (2, '[{"A": 74, "action": "clicks"}]')
],
columns=['Id', 'action']
)
# new dataframe
df_new = pd.DataFrame(
[ (id, k, v, i['action']) for id,act in zip(df.Id, df.action.apply(json.loads))
for i in act
for k,v in i.items() if k != 'action'
],
columns=['Id', 'Source', 'Value', 'Action']
)
print(new_df)
# Id Source Value Action
#0 1 E 4 views
#1 1 A 58 views
#2 2 A 74 clicks
关于python - 数据框的一列是字典列表,我需要将其解析为新的单词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56091481/