【问题标题】:Pandas Dataframe output to JSON熊猫数据框输出到 JSON
【发布时间】:2013-02-23 19:54:48
【问题描述】:

我有一个带有 DateTimeIndex 的 Pandas 数据框和带有每小时对象的列,我想将单个列转换并输出为一个 JSON 文件,该文件由每小时值的每日数组组成。

一个简单的例子:

如果我有数据框:

In [106]: 
rng = pd.date_range('1/1/2011 01:00:00', periods=12, freq='H') 
df = pd.DataFrame(randn(12, 1), index=rng, columns=['A'])

In [107]:
df

Out[107]:
                     A
2011-01-01 01:00:00 -0.067214
2011-01-01 02:00:00  0.820595
2011-01-01 03:00:00  0.442557
2011-01-01 04:00:00 -1.000434
2011-01-01 05:00:00 -0.760783
2011-01-01 06:00:00 -0.106619
2011-01-01 07:00:00  0.786618
2011-01-01 08:00:00  0.144663
2011-01-01 09:00:00 -1.455017
2011-01-01 10:00:00  0.865593
2011-01-01 11:00:00  1.289754
2011-01-01 12:00:00  0.601067

我想要这个 json 文件:

[    
 [-0.0672138259,0.8205950583,0.4425568167,-1.0004337373,-0.7607833867,-0.1066187698,0.7866183048,0.1446634381,-1.4550165851,0.8655931982,1.2897541164,0.6010672247]
]

我的实际数据框要长很多天,因此大致如下所示:

[
 [value@hour1day1, value@hour2day1.....value@hour24day1],
 [value@hour1day2, value@hour2day2.....value@hour24day2],
 [value@hour1day3, value@hour2day3.....value@hour24day3],
 ....
 [value@hour1LastDay, value@hour2LastDay.....value@hour24LastDay]
]

【问题讨论】:

    标签: python json pandas


    【解决方案1】:
    import json
    import pandas as pd
    import numpy as np
    
    rng = pd.date_range('1/1/2011 01:00:00', periods=12, freq='H') 
    df = pd.DataFrame(np.random.randn(12, 1), index=rng, columns=['A'])
    
    print json.dumps(df.T.as_matrix().tolist(),indent=4)
    

    出来:

    [
        [
            -0.6916923670267555, 
            0.23075256008033393, 
            1.2390943452146521, 
            -0.9421708175530891, 
            -1.4622768586461448, 
            -0.3973987276444045, 
            -0.04983495806442656, 
            -1.9139530636627042, 
            1.9562147260518052, 
            -0.8296105620697014, 
            0.2888681009437529, 
            -2.3943000262784424
        ]
    ]
    

    或者作为多天的完整示例,使用groupby 功能:

    rng = pd.date_range('1/1/2011 01:00:00', periods=48, freq='H') 
    df = pd.DataFrame(np.random.randn(48, 1), index=rng, columns=['A'])
    
    grouped = df.groupby(lambda x: x.day)
    data = [group['A'].values.tolist() for day, group in grouped]
    print json.dumps(data, indent=4)
    

    出来:

    [
        [
            -0.8939584996681688, 
            ...
            -1.1332895023662326
        ], 
        [
            -0.1514553673781838, 
            ...
            -1.8380494963443343
        ], 
        [
            -1.8342085568898159
        ]
    ]
    

    【讨论】:

    • 非常优雅的解决方案。谢谢
    猜你喜欢
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    相关资源
    最近更新 更多