You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多JSON文件生成的列表转换为指定格式的Pandas DataFrame

问题原因分析
  1. 你的data_list实际是多个单行单列DataFrame的集合,不是单纯的JSON字符串列表。当你用csv.writer.writerow(data_list)写入时,writerow会把列表里的每个小DataFrame当作一列的表头内容,导致生成的CSV结构变成多列无数据,后续读取后就得到n列0行的DataFrame。
  2. 你错误混用了原生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

根据你的需求,有两种筛选方式:

  1. 按JSON字符串内容筛选:直接匹配字符串中的关键词
# 筛选包含"特定查询内容"的行
filtered_df = df[df['json'].str.contains('特定查询内容')]
  1. 解析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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 06:47:45