从 JSON 数据中获取信息并存储到 CSV 文件中

Posted

技术标签:

【中文标题】从 JSON 数据中获取信息并存储到 CSV 文件中【英文标题】:Get info from JSON data and store into CSV file 【发布时间】:2018-05-17 16:53:36 【问题描述】:

我能够获取名称、信息和积分(其中的所有数据都作为完整数据进来)。 这是示例输入数据:

data : [['Info':'http:\/\/www.epa.gov\/enviro\/geo_data.html', 'Name':'US RCRA Generators (CESQG, SQG, LQG)', 'Color':[
240, 180, 120 ], 'Points':[

'Direction':'1.64069406001901', 'Description':'SRID=4326;POINT(-111.74632     33.29791)', 'Fields':[

'Value':'COSTCO #644', 'Key':'Primary Name' , 
'Value':'2887 S MARKET ST', 'Key':'Address' , 
'Value':'GILBERT', 'Key':'City' , 
'Value':'MARICOPA', 'Key':'County' , 
'Value':'ONE-HOUR PHOTOFINISHING., OTHER GASOLINE STATIONS.', 'Key':'NAICS     Descriptions'  ], 'Longitude':'-111.74632', 'Latitude':'33.29791',     'Type':'ST_Point'  ]]]

这是我尝试过的:

info_list = []
name_list = []
points_list = []
lat_list = []
long_list = []
for ff in finalJson:
    for gg in ff:
        info = gg['Info']
        name = gg['Name']
        points = gg['Points']
        info_list.append(info)
        name_list.append(name)
        points_list.append(points)

但需要获取csv中的键值数据(引用的东西作为列名和值作为行与它们各自):'Name','Info','Points'['Latitude'],'Points'[ 'Longitude'],'Points'['Fields'[这个块内的所有键、值]]

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

为什么不使用json_normalize?

它在将对象扁平化为 pandas 数据框方面做得非常好:

from pandas.io.json import json_normalize
df = json_normalize(json_data['data'])
print(df.head())

然后清理/重组数据框,最后使用to_csv将其导出为CSV。

df.to_csv('/path/output.csv', encoding='utf-8')

编辑:将“点”列拆分为多列。

df2 = df.groupby('Info').Points.apply(lambda x: pd.DataFrame(x.values[0])).reset_index()
final_df = pd.concat([df, df2])
print(final_df)

【讨论】:

您的方法是正确的,但数据就像字典列表一样,因此我收到“TypeError:列表索引必须是整数,而不是 str”。需要添加任何修改来解决这个问题吗?

以上是关于从 JSON 数据中获取信息并存储到 CSV 文件中的主要内容,如果未能解决你的问题,请参考以下文章

将 CSV 文件从 JSON 数据上传到 S3 存储桶

处理csv和json数据

如何通过将 csv 数据存储在变量中来将其访问到 yml 文件中?

如何在 firebase 存储上上传多个文件并将访问 url 和元数据作为 json 或 csv 文件获取? [关闭]

在python中从多个JSON文件中提取信息到单个CSV文件

如何从 csv 文件中获取数据并使用 mysql 保存到 grails 中?