使用python将json转换为csv

使用python将json转换为csv,python,json,csv,pandas,dataframe,Python,Json,Csv,Pandas,Dataframe,我曾提及: 这是: 尝试在pandas中使用json_normalize规范化我的json片段。 但是,输出没有得到完全规范化。这是我的一段代码 x =[{'fb_metrics': [{'period': 'lifetime', 'values': [{'value': {'share': 2, 'like': 10}}], 'title': 'Lifetime Post Stories by action type', 'name': 'post_stories_by_action_typ

我曾提及:

这是:

尝试在pandas中使用json_normalize规范化我的json片段。 但是,输出没有得到完全规范化。这是我的一段代码

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
[{'value': {'share': 2, 'like': 10}}] 
我希望有两列输出,而不是像

value.share   value.like
2                10

我应该如何做到这一点

您可以再次将
json\u normalize
应用到值列以使其平坦化:

pd.concat([
    df.drop('values', 1), 
    df['values'].apply(lambda x: pd.io.json.json_normalize(x).iloc[0])
], axis=1)
对于您的数据帧

您可以使用
df.from\u dcit()
do从值中的嵌套字典创建新的数据帧:

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

如果你能解释一下为什么你的代码可以工作,那就更好了。
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')