mva*_*mva 14 python json pandas
我实际上有一个熊猫数据帧,我想将其保存为json格式.从熊猫文档中可以看出:
注意NaN,NaT和None将转换为null,datetime对象将根据date_format和date_unit参数进行转换
然后使用orient选项records 我有这样的东西
[{"A":1,"B":4,"C":7},{"A":null,"B":5,"C":null},{"A":3,"B":null,"C":null}]
Run Code Online (Sandbox Code Playgroud)
是否有可能改为:
[{"A":1,"B":4,"C":7},{"B":5},{"A":3}]'
Run Code Online (Sandbox Code Playgroud)
谢谢
Dav*_*rio 10
上面的解决方案实际上并没有以“记录”格式产生结果。此解决方案也使用 json 包,但产生的结果与原始问题中要求的结果完全相同。
import pandas as pd
import json
json.dumps([row.dropna().to_dict() for index,row in df.iterrows()])
Run Code Online (Sandbox Code Playgroud)
此外,如果您想包含索引(并且您使用的是 Python 3.5+),您可以执行以下操作:
json.dumps([{'index':index, **row.dropna().to_dict()} for index,row in df.iterrows()])
Run Code Online (Sandbox Code Playgroud)
以下内容接近您想要的,本质上我们创建一个非 NaN 值的列表,然后调用to_json它:
In [136]:
df.apply(lambda x: [x.dropna()], axis=1).to_json()
Out[136]:
'{"0":[{"a":1.0,"b":4.0,"c":7.0}],"1":[{"b":5.0}],"2":[{"a":3.0}]}'
Run Code Online (Sandbox Code Playgroud)
此处创建列表是必要的,否则它将尝试将结果与原始 df 形状对齐,这将重新引入NaN您想要避免的值:
In [138]:
df.apply(lambda x: pd.Series(x.dropna()), axis=1).to_json()
Out[138]:
'{"a":{"0":1.0,"1":null,"2":3.0},"b":{"0":4.0,"1":5.0,"2":null},"c":{"0":7.0,"1":null,"2":null}}'
Run Code Online (Sandbox Code Playgroud)
还调用 的list结果dropna将使用形状广播结果,例如填充:
In [137]:
df.apply(lambda x: list(x.dropna()), axis=1).to_json()
Out[137]:
'{"a":{"0":1.0,"1":5.0,"2":3.0},"b":{"0":4.0,"1":5.0,"2":3.0},"c":{"0":7.0,"1":5.0,"2":3.0}}'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4924 次 |
| 最近记录: |