我实际上有一个pandas数据帧,我想将它保存为json格式。 从熊猫文档中可以看出:
注意NaN,NaT和None将转换为null和datetime 对象将根据date_format和date_unit进行转换 参数
然后使用东方选项records
我有类似这样的东西
[{"A":1,"B":4,"C":7},{"A":null,"B":5,"C":null},{"A":3,"B":null,"C":null}]
是否可以改为:
[{"A":1,"B":4,"C":7},{"B":5},{"A":3}]'
谢谢
答案 0 :(得分:3)
以下内容接近你想要的内容,基本上我们创建了一个非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}]}'
此处需要创建列表,否则会尝试将结果与原始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}}'
同时在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}}'
答案 1 :(得分:3)
上述解决方案实际上并未在'记录中产生结果。格式。此解决方案还使用了json包,但产生了原始问题中要求的结果。
import pandas as pd
import json
json.dumps([row.dropna().to_dict() for index,row in df.iterrows()])
此外,如果您想要包含索引(并且您使用的是Python 3.5+),则可以执行以下操作:
json.dumps([{'index':index, **row.dropna().to_dict()} for index,row in df.iterrows()])
答案 2 :(得分:0)
我遇到了同样的问题,我的解决方案是使用 json 模块而不是 pd.DataFrame.to_json()
我的解决方案是
以下是代码:
import pandas as pd
import json
from pandas import compat
def to_dict_dropna(df):
return {int(k): v.dropna().astype(int).to_dict() for k, v in compat.iteritems(df)}
json.dumps(to_dict_dropna(df))