使用 python pandas 将 json 转换为 csv

Posted

技术标签:

【中文标题】使用 python pandas 将 json 转换为 csv【英文标题】:converting json to csv using python pandas 【发布时间】:2017-09-12 05:42:44 【问题描述】:

我已经提到了这个: Nested Json to pandas DataFrame with specific format

还有这个:json_normalize produces confusing KeyError

尝试在 pandas 中使用 json_normalize 规范化我的 json sn-p。 但是,输出并没有完全标准化。这是我的代码的 sn-p

x =['fb_metrics': ['period': 'lifetime', 'values': ['value': 'share': 2, 'like': 10], 'title': 'Lifetime Post Stories by action type', 'name': 'post_stories_by_action_type', '_id': '222530618111374_403476513350116/insights/post_stories_by_action_type/lifetime', 'description': 'Lifetime: The number of stories created about your Page post, by action type. (Total Count)']]

df = pd.io.json.json_normalize(x[0]['fb_metrics'])

values 列的输出是

values
['value': 'share': 2, 'like': 10] 

我希望有两列输出,而不是像

value.share   value.like
2                10

我应该如何做到这一点?

【问题讨论】:

【参考方案1】:
import pandas as pd
df = pd.read_json('data.json')
df.to_csv('data.csv', index=False, columns=['title', 'subtitle', 'date', 
'description'])

import pandas as pd
df = pd.read_csv("data.csv")
df = df[df.columns[:4]]
df.dropna(how='all')
df.to_json('data.json', orient='records')

【讨论】:

最好能解释一下为什么你的代码可以工作。【参考方案2】:

对于您的数据框,

您可以使用 df.from_dcit() 从值内的嵌套字典创建一个新的 DataFrame:

df2 = pd.DataFrame.from_dict(df['values'].values[0][0], orient = 'index').reset_index().drop(['index'], axis=1)

得到:

df2:

   share  like
0      2    10

然后将其添加到您现有的数据框中,使用pd.concat 获得您需要的格式:

result = pd.concat([df, df2], axis=1, join='inner')

result[['values', 'share', 'like']]
Out[74]: 
                                     values  share  like
0  [u'value': u'share': 2, u'like': 10]      2    10

如果需要可以重命名:

result.rename(columns='share': 'values.share', 'like':'values.like', inplace=True)

result[['values', 'share', 'like']]
Out[74]: 
                                     values  values.share  values.like
0  [u'value': u'share': 2, u'like': 10]             2           10

【讨论】:

【参考方案3】:

您可以将json_normalize 再次应用于值列以将其展平:

pd.concat([
    df.drop('values', 1), 
    df['values'].apply(lambda x: pd.io.json.json_normalize(x).iloc[0])
], axis=1)

【讨论】:

以上是关于使用 python pandas 将 json 转换为 csv的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 3.9 中使用 Pandas 将 Excel 转换为 JSON

使用 python 和 pandas 将多数组 json 数据转换为扁平数据框

使用 pandas python 将嵌套的 JSON 解析为多个数据帧

使用 Pandas 在 Python 中过滤嵌套的 JSON 数据

将 Python Pandas 数据框转换为 JSon 格式并通过使用 Python 添加其列名保存到 MongoDB 数据库中

JSON字典到Python中的Pandas DataFrame