将Pandas DataFrame转换为JSON的最佳方法

2 投票
1 回答
657 浏览
提问于 2025-04-30 18:20

我想把 pandas 数据框转换成 JSON 格式,但我得不到我想要的结果。我对 pandas 还不太熟悉,不知道有没有简单的方法可以做到这一点。我现在想到的就是不停地循环来获取“freq”和“state”这两个键,但我觉得应该有更好的办法。有没有什么建议呢?

我想要的 JSON 格式是:

 [
    {State:'AL',freq:{low:4786, mid:1319, high:249}}
    ,{State:'AZ',freq:{low:1101, mid:412, high:674}}
    ,{State:'CT',freq:{low:932, mid:2149, high:418}}
    ,{State:'DE',freq:{low:832, mid:1152, high:1862}}
    ,{State:'FL',freq:{low:4481, mid:3304, high:948}}
    ,{State:'GA',freq:{low:1619, mid:167, high:1063}}
    ,{State:'IA',freq:{low:1819, mid:247, high:1203}}
    ,{State:'IL',freq:{low:4498, mid:3852, high:942}}
    ,{State:'IN',freq:{low:797, mid:1849, high:1534}}
    ,{State:'KS',freq:{low:162, mid:379, high:471}}
    ];

但是我的数据框有三列,长这样:

我得到的数据框是:

State   type    freq
AZ  low 1101
CT  low 932
DE  low 832
FL  low 4481
GA  low 1619
IA  low 1819
IL  low 4498
IN  low 797
KS  low 162
AZ  mid 412
CT  mid 2149
DE  mid 1152
FL  mid 3304
GA  mid 167
IA  mid 247
IL  mid 3852
IN  mid 1849
KS  mid 379
AZ  high    674
CT  high    418
DE  high    1862
FL  high    948
GA  high    1063
IA  high    1203
IL  high    942
IN  high    1534
KS  high    471
暂无标签

1 个回答

2
import pandas as pd

data = """\
State   type    freq
AZ  low 1101
CT  low 932
DE  low 832
FL  low 4481
GA  low 1619
IA  low 1819
IL  low 4498
IN  low 797
KS  low 162
AZ  mid 412
CT  mid 2149
DE  mid 1152
FL  mid 3304
GA  mid 167
IA  mid 247
IL  mid 3852
IN  mid 1849
KS  mid 379
AZ  high    674
CT  high    418
DE  high    1862
FL  high    948
GA  high    1063
IA  high    1203
IL  high    942
IN  high    1534
KS  high    471"""

data = pd.DataFrame([line.split() for line in data.splitlines()[1:]],
                    columns=data.splitlines()[0].split())

bystate = data.pivot('State', 'type')

打印

          freq            
   type   high   low   mid
   State                  
   AZ      674  1101   412
   CT      418   932  2149
   DE     1862   832  1152
   FL      948  4481  3304
   GA     1063  1619   167
   IA     1203  1819   247
   IL      942  4498  3852
   IN     1534   797  1849
   KS      471   162   379

一旦你得到了最终的数据表,你可以使用 bystate.to_json() 来获取一个格式为JSON的字符串。

撰写回答