我正在研究d3.js图形。我的数据是一个巨大的多字节.xls。我必须从每个标签中获取数据,所以我决定将它全部转储到pandas中并导出一些.json。
原始数据,分布在多个标签中:
demography, area, state, month, rate
over 65, region2, GA, May, 23
over 65, region2, AL, May, 25
NaN, random_odd_data, mistake, error
18-65, region2, GA, 77
18-65, region2, AL, 75
现在,放入大熊猫,合并并清理:
demography area state month rate
0 over 65 region2 GA May 23
1 over 65 region2 AL May 25
2 18-65 region2 GA May 50
3 18-65 region2 AL May 55
现在,将其分组
group = df.groupby(['state', 'demography'])
产量
<pandas.core.groupby.DataFrameGroupBy object at 0x106939610>
尝试这个:
group = df.groupby(['state', 'demography']).count()
产生几乎正确的东西,除了我不想算任何东西,我只想要“率”
state demography area month rate
AL over 65 1 1 1
18-65 1 1 1
GA over 65 1 1 1
18-65 1 1 1
果然,这只为每个值输出“1”,lol:
group.reset_index().to_json("myjson2.json", orient="index")
dang我几乎在那里,如何将其导出,以便每个州都是父母?
[
{
"state": "Alabama",
"over 65": 25,
"18-65": 50
},
{
"state": "Georgia",
"over 65": 23,
"18-65": 55
}
]
答案 0 :(得分:4)
count方法计算每列中每个组的非NaN条目数,因此它们为什么在这里全部为1(每个组的大小为1,没有NaN)。
(我无法找到具体的链接,但在the groupby docs中提及。)
我认为你真正想要的是pivot_table
:
In [11]: res = df.pivot_table('rate', 'state', 'demography')
In [12]: res
Out[12]:
demography 18-65 over65
state
AL 55 25
GA 50 23
我认为您正在寻找orient='records'
(首先需要reset_index
):
In [13]: res.reset_index().to_json(orient='records')
Out[13]: '[{"state":"AL","18-65":55,"over65":25},{"state":"GA","18-65":50,"over65":23}]'