首页 文章

保存pandas数据帧以分离没有NaN的jsons

提问于
浏览
1

我有一个带有一些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]])

看起来像:

enter image description here

得到一个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,但没有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”: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文件中

1 回答

  • 1

    使用 applyNaN 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'))
    

相关问题