将json读入数据帧并添加/合并它们

2024-06-28 10:49:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将一个csv文件读入我的数据帧。其中一列是json(字符串)。你知道吗

我将read\u json函数应用于my\u json\u 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,我的目标是把它们加在一起,所以最后我把数字加在一起,列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),而是有一个不同的起点?任何帮助都将不胜感激


Tags: jsonreadnandescrc1c5c6c4
2条回答

^{}与聚合sum一起使用,以避免0而不是NaN的add 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
pd.merge(df1, df2, how='outer').groupby('Descr', as_index=False).sum()
    Descr   C5  C6  C8  C1  C4
0   descr1  7.0 0.0 0.0 0.0 5.0
1   descr2  0.0 2.0 0.0 0.0 0.0
2   descr3  0.0 0.0 0.0 7.0 0.0
3   descr5  0.0 0.0 9.0 0.0 0.0

相关问题 更多 >