如何将多JSON文件生成的列表转换为指定格式的Pandas DataFrame
问题原因分析
- 你的
data_list实际是多个单行单列DataFrame的集合,不是单纯的JSON字符串列表。当你用csv.writer.writerow(data_list)写入时,writerow会把列表里的每个小DataFrame当作一列的表头内容,导致生成的CSV结构变成多列无数据,后续读取后就得到n列0行的DataFrame。 - 你错误混用了原生
csv模块和pandas的处理逻辑,没有利用pandas的合并能力来处理多个小DataFrame。
修正方案(实现单列DataFrame)
有两种简洁的方式可以实现你想要的单列结构:
方式一:合并读取的小DataFrame
直接利用pandas的concat合并所有小DataFrame,再重命名列:
import os import pandas as pd base_dir = 'jsons_final_folder/' data_list = [] for file in os.listdir(base_dir): if 'json' in file: json_path = os.path.join(base_dir, file) # 读取单个JSON文件为单行DataFrame json_data = pd.read_json(json_path, lines=True) data_list.append(json_data) # 合并所有小DataFrame为一个大表,重置索引 df = pd.concat(data_list, ignore_index=True) # 重命名列为你需要的"json" df.columns = ['json'] # 保存为CSV df.to_csv('f.csv', index=False)
方式二:直接读取JSON字符串
如果每个JSON文件里仅存一行JSON字符串,也可以直接读取文件内容,避免生成小DataFrame:
import os import pandas as pd base_dir = 'jsons_final_folder/' json_strings = [] for file in os.listdir(base_dir): if 'json' in file: json_path = os.path.join(base_dir, file) with open(json_path, 'r', encoding='utf-8') as f: # 读取每行(支持多行吗也可以) for line in f: json_strings.append(line.strip()) # 生成单列DataFrame df = pd.DataFrame({'json': json_strings}) df.to_csv('f.csv', index=False)
后续筛选特定查询的JSON
根据你的需求,有两种筛选方式:
- 按JSON字符串内容筛选:直接匹配字符串中的关键词
# 筛选包含"特定查询内容"的行 filtered_df = df[df['json'].str.contains('特定查询内容')]
- 解析JSON后按字段筛选:如果需要基于JSON内部的字段筛选,先解析再过滤
# 将json列解析为字典格式 df['parsed_json'] = df['json'].apply(pd.read_json, typ='series') # 示例:筛选general.key等于"目标值"的行 filtered_df = df[df['parsed_json'].apply(lambda x: x['general']['key'] == '目标值')]
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

