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

时间:2017-10-19 13:39:10

标签: python json python-2.7 pandas

我使用此代码将pandas 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字符串的结构是普通的,没有数组,只有字符串,整数和浮点字段。

5 个答案:

答案 0 :(得分:4)

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)

答案 1 :(得分:3)

.to_json(fname)函数会直接将数据写入json文件,并且不会向您返回任何内容,因此print将返回none,但实际文件位于文件系统中。

更新:如果要将json字符串保存为python中的变量,则不要在函数to_json()中指定filename参数。您可以执行:a = df.iloc[0].to_json(),字符串将保存到变量a

答案 2 :(得分:0)

感谢这对我有用,最后一列保存为JSon:

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

答案 3 :(得分:0)

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

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 :(得分:0)

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

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