【问题标题】:Write Pandas DataFrame to newline-delimited JSON将 Pandas DataFrame 写入换行符分隔的 JSON
【发布时间】:2015-05-12 15:33:12
【问题描述】:

我首先通过 pandas read_csv() 函数将 CSV 读入 Pandas 数据框。现在数据在一个实际的数据框中,我试着写这样的东西:

for row in df.iterrows():
    row[1].to_json(path_to_file)

这可行,但只有最后一行保存到磁盘,因为我每次调用 row[1].to_json(path_to_file) 时都在重写文件。我尝试了其他一些文件处理选项,但无济于事。任何人都可以对如何进行有所了解吗?

谢谢!

【问题讨论】:

  • 你有一些示例输入/输出...有两种编写 DF 的方法,我认为可能有用 - 否则,你只是想写一个特定的列吗?跨度>
  • DataFrame 本质上是数据的表表示。 JSON的结构是什么?

标签: python json pandas


【解决方案1】:

要从数据框 df 创建以换行符分隔的 json,请运行以下命令

df.to_json("path/to/filename.json",
           orient="records",
           lines=True)

密切注意那些可选的关键字参数!在 pandas 0.19.0 中添加了 lines 选项。

【讨论】:

    【解决方案2】:

    您可以将缓冲区传递给df.to_json()

    In [1]: import pandas as pd
    
    In [2]: df = pd.DataFrame({"a":[1,3,5], "b":[1.1,1.2,1.2]})
    
    In [3]: df
    Out[3]: 
       a    b
    0  1  1.1
    1  3  1.2
    2  5  1.2
    
    In [4]: f = open("temp.txt", "w")
    
    In [5]: for row in df.iterrows():
        row[1].to_json(f)
        f.write("\n")
       ...:     
    
    In [6]: f.close()
    
    In [7]: open("temp.txt").read()
    Out[7]: '{"a":1.0,"b":1.1}\n{"a":3.0,"b":1.2}\n{"a":5.0,"b":1.2}\n'
    

    【讨论】:

    • 效果很好,谢谢!如果我有 15 名声望,我会支持你的回答。
    • 很高兴为您提供帮助。不需要投票,你可以接受这个答案是正确的。
    • Noah 这将是一个愚蠢的问题,但我如何将其读回 Pandas DF 中?我尝试使用 open('jason_lines_file') as f: for line in f: pd.read_json(line)
    • 你最好再问一个问题;但作为提示,您需要执行pd.read_json(line, typ="series"),然后从输出构建一个框架
    • 这提出了一个问题,你确定这是你想要保存的格式吗? :)
    【解决方案3】:

    如果您尝试使用 iterrows 编写 DF - 我怀疑您应该查看:

    df.to_json(orient='records') # List of lists of values
    # [[1, 2], [3,4]]
    

    或者:

    df.to_json(orient='records') # List of dicts with col->val
    # [{'A': 1, 'B': 2}, {'A': 3, 'B': 4}]
    

    或者写一个 {index:col value} 的字典:

    df.A.to_json()
    # {0: 1, 1: 3}
    

    【讨论】:

    • solution #1 df.to_json(orient='records') 是完美的,除了记录是逗号分隔的,我需要它们是行分隔的。还有其他建议吗?而且我不明白您的第一个解决方案和您的第二个解决方案之间的区别 - 我认为它们是相同的代码:)
    • @uspowpow 你可以使用lines arg: df.to_json(orient="records", lines=True)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 2020-06-12
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多