【发布时间】:2021-12-27 16:33:27
【问题描述】:
我有这样的数据框:
id date value
1 2021-09-01 [{'value': 'Keyman', 'sum': 8932.199999999999}
{'value': 'Suluboya', 'sum': 5896.7499999999945}]
2 2021-10-01 [{'value': 'Atelier', 'sum': 5595.299999999992}
{'value': 'Atölye4D', 'sum': 3538.7299999999987}]
预期输出:
idx date value sum
1 2021-09-01 Keyman 8932.199999999999
2 2021-09-01 Suluboya 5896.7499999999945
3 2021-10-01 Atelier 5595.299999999992
4 2021-10-01 Atölye4D 3538.7299999999987
我试过了:
df = pd.json_normalize(df['value'][0])
这仅适用于第一行。它有效,但还有很多数据,我相信还有更短的方法。我也试过了。
def only_dict(d):
return ast.literal_eval(d) if pd.notnull(d) else {}
dfy = json_normalize(df['value'].apply(only_dict).tolist()).add_prefix('_')
但我收到此错误:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
【问题讨论】:
-
简单但漫长的路是使用你自己的方式,但在一个循环中,即
df = pd.json_normalize(df['value'][0]),其中0将是i
标签: python json pandas dataframe