Python 保存一个数据帧以分离没有NAN的JSON

Python 保存一个数据帧以分离没有NAN的JSON,python,json,pandas,dataframe,nan,Python,Json,Pandas,Dataframe,Nan,我有一个带有一些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,

我有一个带有一些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: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文件中

使用
apply
删除
NaN
s,
groupby
到group,并
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'))

Dataframe+预期输出将非常有用!谢谢。@cᴏʟᴅsᴘᴇᴇᴅ 补充!抱歉,没有提供足够的详细信息。如果我将原始数据框的索引更改为数据中包含字符串的列,并且希望得到相同的输出,该怎么办?我得到错误类型错误:无法使用此索引类型执行floordiv:。@pr338使用
np.arange(df.shape[0])//2
对不起,我不清楚。我指的是索引为字符串的输出,如“indexhere”[{“fund.numeric.returnY3CategoryRank”:0,“fund…如果仍然不清楚,将用另一个示例编辑原始问题。@pr338啊,对不起…事情变得混乱。你能问一个新问题吗?