我的数据框有一些NaN值。
以下是一个示例数据框:
sample_df = pd.DataFrame([[1,np.nan,1],[2,2,np.nan], [np.nan, 3, 3], [4,4,4],[np.nan,np.nan,5], [6,np.nan,np.nan]])
看起来像:
获得json后我做了什么:
sample_df.to_json(orient = 'records')
给出了:
'[{"0":1.0,"1":null,"2":1.0},{"0":2.0,"1":2.0,"2":null},{"0":null,"1":3.0,"2":3.0},{"0":4.0,"1":4.0,"2":4.0},{"0":null,"1":null,"2":5.0},{"0":6.0,"1":null,"2":null}]'
我想将此数据帧保存到json中,每个json中有2行,但没有Nan值。以下是我尝试这样做的方法:
df_dict = dict((n, sample_df.iloc[n:n+2, :]) for n in range(0, len(sample_df), 2))
for k, v in df_dict.items():
print(k)
print(v)
for d in (v.to_dict('record')):
for k,v in list(d.items()):
if type(v)==float:
if math.isnan(v):
del d[k]
json.dumps(df_dict)
我想要的输出:
' [{" 0":1.0," 2":1.0},{" 0":2.0" 1&# 34;:2.0}]' - >在一个.json文件中 ' [{" 1":3.0" 2":3.0},{" 0":4.0," 1&#34 ;: 4.0" 2":4.0}]' - >在第二个.json文件中 ' [{" 2":5.0},{" 0":6.0}]' - >在第三个.json文件
答案 0 :(得分:1)
使用apply
将NaN
,groupby
放到群组,dfGroupBy.apply
放到JSONify。
s = sample_df.apply(lambda x: x.dropna().to_dict(), 1)\
.groupby(sample_df.index // 2)\
.apply(lambda x: x.to_json(orient='records'))
s
0 [{"0":1.0,"2":1.0},{"0":2.0,"1":2.0}]
1 [{"1":3.0,"2":3.0},{"0":4.0,"1":4.0,"2":4.0}]
2 [{"2":5.0},{"0":6.0}]
dtype: object
最后,迭代.values
并保存为单独的JSON文件。
import json
for i, j_data in enumerate(s.values):
json.dump(j_data, open('File{}.json'.format(i + 1), 'w'))