-->

保存大熊猫数据帧,而不NaN的分离jsons(Saving a pandas dataframe t

2019-09-29 08:28发布

我有一些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 2行的JSON,但没有楠值。 这里是我试图做到这一点:

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”:2.0}]' - >在一个上传.json文件“[{ “1”:3.0, “2” :3.0},{ “0”:4.0, “1”:4.0 “2”:4.0}] ' - >在第二上传.json文件'[{ “2”:5.0},{ “0”:6.0}] “ - 在第三个以.json文件>

Answer 1:

使用apply于下降NaN S, 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'))


文章来源: Saving a pandas dataframe to separate jsons without NaNs