我正在将 csv 文件读入我的 pandas DataFrame。其中一列 my_json_col 是 JSON(字符串形式)。
我将 read_json 函数应用于 my_json_col
df['json_col'].apply(read_json)
所以这个 JSON:
[{"C5": 4, "Descr": "descr1"}, {"C6"": 2, "Descr": ""descr2"}, {"C8": 9, "Descr": ""descr5"}]
会变成
C5 C6 C8 Descr
0 4.0 NaN NaN descr1
1 NaN 2.0 NaN descr2
2 NaN NaN 9.0 descr5
和
[{"C1": 7, "Descr": "descr3""}, {"C5"": 3, "Descr"": "descr1""}, {"C4": 5, "Descr": "descr1"}]
会变成
C1 C4 C5 Descr
0 7.0 NaN NaN descr3
1 NaN NaN NaN descr4
2 NaN 5.0 3.0 descr1
“添加”这两个数据框应该给我:
C1 C4 C5 C6 C8 Descr
0 NaN 5.0 7.0 NaN NaN descr1
1 NaN NaN NaN 2.0 NaN descr2
2 7.0 NaN NaN NaN NaN descr3
3 NaN NaN NaN NaN NaN descr4
4 NaN NaN NaN NaN 9.0 descr5
这里数字 3 和 4 被添加到 C1 的 descr1 中。
现在我的 JSON 中有 C1-C9 列(并非所有 JSON 中都存在),它们都是数字。
我还有 Descr 列,其值为 descr1-descr5,均为文本。
我有很多这样的 JSON,我的目标是将它们添加在一起,所以最后我将数字添加在一起,并且 Column Descr 具有值 descr1-descr5。
C1 C2 C3 C4 C5 C6 C7 C7 C9 Descr
0 descr1
1 added numbers descr2
2 added numbers descr3
3 descr4
4 descr5
我尝试过合并和求和,但没有任何结果。也许我不应该使用 apply(read_json) 而是有一个不同的起点?任何帮助将不胜感激
最佳答案
使用concat
使用聚合 sum
,为了避免 0
而不是 NaN
添加 min_count=1
参数:
df = pd.concat([df1, df2], sort=True).groupby('Descr', as_index=False).sum(min_count=1)
print (df)
Descr C1 C4 C5 C6 C8
0 descr1 NaN 5.0 7.0 NaN NaN
1 descr2 NaN NaN NaN 2.0 NaN
2 descr3 7.0 NaN NaN NaN NaN
3 descr4 NaN NaN NaN NaN NaN
4 descr5 NaN NaN NaN NaN 9.0
最后更改列顺序:
df = df[df.columns[1:].tolist() + df.columns[:1].tolist()]
print (df)
C1 C4 C5 C6 C8 Descr
0 NaN 5.0 7.0 NaN NaN descr1
1 NaN NaN NaN 2.0 NaN descr2
2 7.0 NaN NaN NaN NaN descr3
3 NaN NaN NaN NaN NaN descr4
4 NaN NaN NaN NaN 9.0 descr5
关于python - 将 JSON 读入 pandas DataFrame 并添加/合并它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57586678/