熊猫排到杰森

时间:2016-03-17 03:26:19

标签: python json pandas

我在pandas中有一个数据帧,我的目标是将数据帧的每一行都写成一个新的json文件。

我现在有点卡住了。我的直觉是迭代数据帧的行(使用df.iterrows)并使用json.dumps转储文件,但无济于事。

有什么想法?

4 个答案:

答案 0 :(得分:9)

Pandas DataFrames有一个to_json方法,可以为您完成: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_json.html

如果您希望每个行都在自己的文件中,您可以迭代索引(并使用索引来帮助命名它们):

for i in df.index:
    df.loc[i].to_json("row{}.json".format(i))

答案 1 :(得分:3)

对索引的循环效率很低。

一种更快的技术:

df['json'] = df.apply(lambda x: x.to_json(), axis=1)

答案 2 :(得分:1)

扩展@MrE的答案,如果您希望将一行中的多列转换为内容为json格式的另一列(而不是将单独的json文件作为输出),则在使用时遇到了速度问题:

df['json'] = df.apply(lambda x: x.to_json(), axis=1)

使用以下代码行,我对17.5万条记录和5列的数据集实现了显着的速度改进:

df['json'] = df.to_json(orient='records', lines=True).splitlines()

速度从> 1分钟变为350毫秒。

答案 3 :(得分:0)

使用套用,可以这样做

def writejson(row):
  with open(row["filename"]+'.json', "w") as outfile:
    json.dump(row["json"], outfile, indent=2)

in_df.apply(writejson, axis=1)

假设数据框有一个名为“文件名”的列,其中每个json行都有文件名。