如何将pandas DataFrame的行保存为JSON字符串?

5

我有一个名为df的pandas DataFrame,我想将每一行转换为JSON字符串,如下所示:

df = pd.DataFrame(np.random.randn(50, 4), columns=list('ABCD'))
df_as_json = df.to_json(orient='records')

然后,我希望你能遍历 df_as_json 的 JSON 字符串(行),并进行以下进一步处理:

for json_document in df_as_json.split('\n'):
    jdict = json.loads(json_document)
    //...

问题在于df_as_json.split('\n')并没有真正将df_as_json分成单独的JSON字符串。

我该怎么做才能实现我需要的功能呢?

你想将数据框的每一行作为一个字典吗? - Stephen Rauch
你可以尝试打印你的 df_as_json。它包含方括号并且没有 \n,所以无法正常工作。@StephenRauch 的解决方案应该非常适合你的情况。 - Pangeran Bottor
@PangeranBottor 不是的,如果你想将JSON文件保存为JSON行,则to_json支持一个lines=True参数。请参见这里 - cs95
由于某些原因,lines=True 对我没有起作用。我收到了一个关于未知参数的错误。 - Markus
@Markus 你需要更新你的pandas版本。最新的稳定版本是0.22。 - cs95
@Markus 从文档中可以看到,lines参数是在0.19版本中新增的。您还应该知道,使用API比自己循环要快得多。 - cs95
3个回答

13

要将数据框的每一行作为一个 dict,您可以使用 pandas.DataFrame.to_dict()

代码:

df = pd.DataFrame(np.random.randn(10, 4), columns=list('ABCD'))
for jdict in df.to_dict(orient='records'):
    print(jdict)

结果:

{'A': -0.81155648424969018, 'B': 0.54051722275060621, 'C': 2.1858014972680886, 'D': -0.92089743800379931}
{'A': -0.051650790117511704, 'B': -0.79176498452586563, 'C': -0.9181773278020231, 'D': 1.1698955805545324}
{'A': -0.59790963665018559, 'B': -0.63673166723131003, 'C': 1.0493603533698836, 'D': 1.0027811601157812}
{'A': -0.20909149867564752, 'B': -1.8022674158328837, 'C': 1.0849019267782165, 'D': 1.2203116471260997}
{'A': 0.33798033123267207, 'B': 0.13927004774974402, 'C': 1.6671536830551967, 'D': 0.29193412587056755}
{'A': -0.079327003827824386, 'B': 0.58625181818942929, 'C': -0.42365912798153349, 'D': -0.69644626255641828}
{'A': 0.33849577559616656, 'B': -0.42955248285258169, 'C': 0.070860788937864225, 'D': 1.4971679265264808}
{'A': 1.3411846077264038, 'B': -0.20189961315847924, 'C': 1.6294881274421233, 'D': 1.1168181183218009}
{'A': 0.61028134135655399, 'B': 0.48445766812257018, 'C': -0.31117315672299928, 'D': -1.7986688463810827}
{'A': 0.9181074339928279, 'B': 0.84151139156427757, 'C': -1.111794854210024, 'D': -0.7131446510569609}

9

从v0.19版本开始,您可以使用带有lines=True参数的to_json将数据保存为JSON lines文件

df.to_json('file.json', orient='records', lines=True)

这样做可以避免使用循环保存每个记录,因为使用to_dict的解决方案会涉及到这一步骤。

file.json的前5行如下所示 -

{"A":0.0162261253,"B":0.8770884013,"C":0.1577913843,"D":-0.3097990255}
{"A":-1.2870077735,"B":-0.1610902061,"C":-0.2426829569,"D":-0.3247587907}
{"A":-0.7743891125,"B":-0.9487264737,"C":1.6366125588,"D":0.2943377348}
{"A":1.5128287075,"B":-0.389437321,"C":0.4841038875,"D":0.5315466818}
{"A":-0.1455759399,"B":1.0205229385,"C":0.6776108196,"D":0.832060379}

0

另一种方法是

input_data=[row.to_json() for index,row in dataset.iterrows()]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接