将 pandas DataFrame 的每一行转换为单独的 Json 字符串

Posted

技术标签:

【中文标题】将 pandas DataFrame 的每一行转换为单独的 Json 字符串【英文标题】:Convert each row of pandas DataFrame to a separate Json string 【发布时间】:2018-03-31 13:46:47 【问题描述】:

我使用此代码将熊猫 DataFrame df 的每一行转换为 Json 字符串。问题是它正在打印None,但是df.head() 打印出数据。

import pandas as pd
import json

df = pd.read_csv('mydataset.csv')

for i in df.index:
    print df.loc[i].to_json("row.json".format(i))
    if i==10:
        break

如何获取每一行作为Json字符串变量并打印出来? Json 字符串的结构很简单,没有数组,只有字符串、整数和浮点字段。

【问题讨论】:

@ScottBoston:问题是如何将每一行转换为 json 字符串,因为我的代码不起作用。 【参考方案1】:

apply 与参数axis=1 一起用于按行处理:

df.apply(lambda x: x.to_json("row.json".format(x.name)), axis=1)

如果只想看输出:

df.apply(lambda x: print(x.to_json()), axis=1)

编辑:

使用自定义函数:

def f(x):
    a = x.to_json()
    print (a)


df.apply(f, axis=1)

【讨论】:

我想在for循环中转换每一行,因为df很大,也因为我需要在for循环中进行一些处理。 如果我做for row in df.iterrows(): data = row.to_json(),它不起作用。 好的,谢谢。只是一个小问题。空数据转换为"field1":null。有什么方法可以将所有空字符串转换为"" 是的,需要df.fillna("").apply(f, axis=1) 但是我可以将它应用到每一行吗?例如:jsonstring = df.iloc[i].to_json(),那么我应该如何处理jsonstring【参考方案2】:

.to_json(fname) 函数会将数据直接写入 json 文件,不会向您返回任何内容,因此打印不会返回任何内容,但实际文件在您的文件系统中。


更新:如果你想将json字符串保存为python中的变量,那么不要在函数to_json()中指定文件名参数。你可以这样做:a = df.iloc[0].to_json(),字符串将被保存到变量a

【讨论】:

那么,我怎样才能把这个Json字符串变成一个变量呢?在这种情况下,我想替换为to_json @Dinosaurius 如果在to_json()函数中没有指定文件名参数,可以在python中保存为变量。【参考方案3】:

我对提出的解决方案不满意并最终这样做:

for chunk in (pd.read_csv(file, sep = ",", header = False, index_col = 0, chunksize=chunk_size)):
    json_chunk = chunk.to_json(orient = "records", force_ascii = True, default_handler = None)

当我读取数百万行时,我的解决方案是使用块来完成的。

【讨论】:

天哪!您节省了很多人工。【参考方案4】:

感谢这对我使用此方法将最后一列保存为 JSon 有用:

df.assign(ln_A = lambda x: x.to_json()))

【讨论】:

【参考方案5】:

为每个数据帧生成一个 json 记录:

for i in df.index:
    record = df.iloc[i].to_json()
    print(record)

【讨论】:

以上是关于将 pandas DataFrame 的每一行转换为单独的 Json 字符串的主要内容,如果未能解决你的问题,请参考以下文章

在 Pandas 中为 DataFrame 中的每一行返回多行

将一个 pandas DataFrame 的副本合并到另一个 DataFrame 的每一行中?

在 pyspark 的 StructStreaming 中;如何将 DataFrame 中的每一行(json 格式的字符串)转换为多列

遍历 Float 时间戳的 Pandas DataFrame 并转换为日期时间

将函数应用于pandas Python中的每一行时出现数据转换错误

pandas 对数据帧DataFrame中数据的增删补全及转换操作