我在pandas中有一个数据帧,我的目标是将数据帧的每一行都写成一个新的json文件。
我现在有点卡住了。我的直觉是迭代数据帧的行(使用df.iterrows)并使用json.dumps转储文件,但无济于事。
有什么想法?
答案 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行都有文件名。