将Pandas DataFrame保存为JSON字符串

时间:2016-06-22 19:47:50

标签: python json pandas dataframe

我意识到这似乎是一个已经在这里提出的问题,但是没有一个解决方案似乎有效。我从一本字典开始,看起来像是这样的:

{'2016-05-08': 1, '2016-05-09': nan, '2016-05-05': nan, '2016-05-06': nan, '2016-05-07': nan, '2016-05-11': nan, 'address': '<email address>, '2016-05-12': nan, '2016-05-10': nan}

我将这些数据读入pandas DataFrame,看起来像这样:

address date1 date2 date3 date4 date5 date6 date7 <email> NaN NaN NaN 1 NaN NaN NaN

然后,我使用以下方法计算平均值和标准差,并将它们添加到DataFrame中:

mean = pd.Series(df.mean(axis=1), index=df.index) std = pd.Series(df.std(axis=1), index=df.index) df = pd.concat([df, mean, std], axis=1)

当我print df时,它看起来应该如此。但是,当我使用此方法将DataFrame写入JSON字符串df.to_json(<path to file>)时,它会在我的JSON文件中获取原始字典。我想要一个包含标准差的所有数据的JSON字符串,并且包含在JSON数据中,我该怎么做?

1 个答案:

答案 0 :(得分:2)

如果摘要列为您提供了所需的数据,请将列添加到数据框中。

尝试

df['std'] = pd.Series(df.std(axis=1), index=df.index)

df['mean'] = pd.Series(df.mean(axis=1), index=df.index)

然后导出到JSON。

编辑:好的,我看到你看到它适用于打印df现在很抱歉)。

我无法重现您的结果。这就是我所拥有的:

import pandas as pd

d = {'2016-05-08': 1, '2016-05-09': float('nan'), '2016-05-05': float('nan'), '2016-05-06': float('nan'), '2016-05-07': float('nan'), '2016-05-11': float('nan'), 'address': '<email address>', '2016-05-12': float('nan'), '2016-05-10': float('nan')}

df = pd.DataFrame(d, index=[0])

mean = pd.Series(df.mean(axis=1), index=df.index)
std = pd.Series(df.std(axis=1), index=df.index)
df = pd.concat([df, mean, std], axis=1)

df.to_json('correctoutput.txt')

这是带有输出的json:

http://www.jsoneditoronline.org/?id=c0b29191d89fba8b593e29009af4f382