【问题标题】:Pandas: Write dataframe to json with splitPandas:使用拆分将数据帧写入 json
【发布时间】:2016-07-13 14:04:07
【问题描述】:

我需要将数据写入json。问题是我无法为字符串建立分隔符。 我的 df 看起来像

     id       date  val
0   123 2015-12-12    1
1   123 2015-12-13    1
2   123 2015-12-14    0
3   123 2015-12-15    1
4   123 2015-12-16    1
5   123 2015-12-17    0
6   123 2015-12-18    1
7   456 2015-12-12    1
8   456 2015-12-13    1
9   456 2015-12-14    0
10  456 2015-12-15    1

我用

df.groupby('id').apply(lambda x: x.set_index('date')['val'].to_dict()).to_json('nielsen', orient='index')

我想得到像这样的东西

{
"1234567890abcdef1234567890abcdef": {
    "2016-06": 1, 
    "2016-05": 0, 
    "2016-04": 0, 
    "2016-03": 1, 
    "2016-02": 1, 
    "2016-01": 0
}, 
"0987654321abcdef1234567890abcdef": {
    "2016-06": 1, 
    "2016-05": 1, 
    "2016-04": 1, 
    "2016-03": 0, 
    "2016-02": 0, 
    "2016-01": 0
}
}

我该怎么做?

【问题讨论】:

    标签: python pandas to-json


    【解决方案1】:

    您可以让 to_json 写入 StringIO 对象,然后使用 json 加载/转储来根据您的喜好进行格式化:

    import pandas as pd
    import StringIO, json
    df = pd.read_csv('data.csv')
    nielson = StringIO.StringIO()
    df.groupby('id').apply(lambda x: x.set_index('date')['val'].to_dict()).to_json(nielson, orient='index')
    print(json.dumps(json.loads(nielson.getvalue()),indent=2))
    

    这会产生:

    {
      "123": {
        "2015-12-14": 0, 
        "2015-12-15": 1, 
        "2015-12-16": 1, 
        "2015-12-17": 0, 
        "2015-12-12": 1, 
        "2015-12-13": 1, 
        "2015-12-18": 1
      }, 
      "456": {
        "2015-12-14": 0, 
        "2015-12-15": 1, 
        "2015-12-12": 1, 
        "2015-12-13": 1
      }
    }
    

    有关其他格式选项,请参阅 help(json.dumps)。 有关如何写入文件的详细信息,请参阅help(json.dump)(基本示例如下所示):

    with open('nielsen','w') as f:
        json.dump(json.loads(nielson.getvalue()), f, indent=2)
    

    【讨论】:

    • 但这仅适用于打印。如何在文件中更改它?
    • 已编辑答案以说明使用 json.dump 写入文件
    • 你能说,按顺序写是真的吗?它写'2014-09', '2013-12'但我需要相反
    • json 对象是无序的,但您可以将sort_keys=True 传递给json.dump 以对其进行排序。
    猜你喜欢
    • 2019-01-05
    • 2018-11-29
    • 2023-04-02
    • 2019-05-31
    • 1970-01-01
    • 2022-01-15
    • 2021-03-02
    • 2020-01-24
    • 1970-01-01
    相关资源
    最近更新 更多