【发布时间】:2022-01-04 10:26:54
【问题描述】:
我有一个包含 json 列的数据框,它非常大而且效率不高,我想将它存储为嵌套数据框。
所以示例数据框看起来像:
id date ag marks
0 I2213 2022-01-01 13:28:05.448054 [{'type': 'A', 'values': {'X': {'F1': 0.1, 'F2': 0.2}, 'U': {'F1': 0.3, 'F2': 0.4}}}, {'type': 'B', 'results': {'Y': {'F1': 0.3, 'F2': 0.2}}}] [{'type': 'A', 'marks': {'X': 0.5, 'U': 0.7}}, {'type': 'B', 'marks': {'Y': 0.4}}]
1 I2213 2022-01-01 14:28:05.448054 [{'type': 'B', 'values': {'Z': {'F1': 0.4, 'F2': 0.2}}}] [{'type': 'A', 'marks': {'X': 0.4, 'U': 0.6}}, {'type': 'B', 'marks': {'Y': 0.3, 'Z': 0.4}}]
2 I2213 2022-01-03 15:28:05.448054 [{'type': 'A', 'values': {'X': {'F1': 0.2, 'F2': 0.1}}}] [{'type': 'A', 'marks': {'X': 0.2, 'U': 0.9}}, {'type': 'B', 'marks': {'Y': 0.2}}]
按日期分组。生成示例数据框的示例代码:
from datetime import datetime, timedelta
def sample_data():
ag_data = [
"[{'type': 'A', 'values': {'X': {'F1': 0.1, 'F2': 0.2}, 'U': {'F1': 0.3, 'F2': 0.4}}}, {'type': 'B', 'results': {'Y': {'F1': 0.3, 'F2': 0.2}}}]",
"[{'type': 'B', 'values': {'Z': {'F1': 0.4, 'F2': 0.2}}}]",
"[{'type': 'A', 'values': {'X': {'F1': 0.2, 'F2': 0.1}}}]",
]
marks_data = [
"[{'type': 'A', 'marks': {'X': 0.5, 'U': 0.7}}, {'type': 'B', 'marks': {'Y': 0.4}}]",
"[{'type': 'A', 'marks': {'X': 0.4, 'U': 0.6}}, {'type': 'B', 'marks': {'Y': 0.3, 'Z': 0.4}}]",
"[{'type': 'A', 'marks': {'X': 0.2, 'U': 0.9}}, {'type': 'B', 'marks': {'Y': 0.2}}]",
]
date_data = [
datetime.now() - timedelta(3, seconds=7200),
datetime.now() - timedelta(3, seconds=3600),
datetime.now() - timedelta(1),
]
df = pd.DataFrame()
df['date'] = date_data
df['ag'] = ag_data
df['marks'] = marks_data
df['id'] = 'I2213'
return df
我尝试使用 json 规范化,但它以柱状方式创建数据框,例如:
d = a['ag'].apply(lambda x: pd.json_normalize(json.loads(x.replace("'", '"'))))
给出带有列type values.X.F1 values.X.F2 values.U.F1 values.U.F2 results.Y.F1 results.Y.F2 的数据框,问题是如何将 dict 键(如 X、Y、F1、F2)作为行而不是列。
是否可以实现如图所示的所需格式?
【问题讨论】:
-
也许这个答案可以帮助你,它似乎对更简单的 JSON 结构做了类似的事情:stackoverflow.com/a/32486449/1703619
-
重塑列 -> 行 => 使用
melt。 pandas.pydata.org/pandas-docs/stable/user_guide/… 或stackpandas.pydata.org/pandas-docs/stable/user_guide/… -
您能否编辑问题并提供代码创建示例数据框?
标签: python json pandas dataframe