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

如何用Pandas读取多行多列结构的CSV文件?

问题解答

能否用pandas.read_csv直接读取该格式文件?

不行。pandas.read_csv是基于单条记录对应单行的标准CSV格式设计的,对于这种一条记录的列信息分散在多行的非标准结构,没有内置参数可以直接处理,官方文档里也确实找不到对应的配置项。

推荐解决方案

核心思路是先将非标准CSV预处理为标准格式,再用pandas读取,以下是具体实现方案:

方案1:预处理文件生成标准CSV

先写简单脚本把每条记录的多行合并为一行,再读取。假设你的每条记录固定占N行(比如示例中每条是4行),可以用如下脚本:

# 读取原始文件,合并多行记录为单行
with open('原始数据.csv', 'r', encoding='utf-8') as in_f, open('标准格式.csv', 'w', encoding='utf-8') as out_f:
    all_lines = in_f.readlines()
    # 按每条记录的行数设置步长,比如每条占4行就设为4
    record_line_count = 4
    for idx in range(0, len(all_lines), record_line_count):
        # 提取当前记录的所有行,去掉换行符后用逗号拼接
        record_segments = [line.strip() for line in all_lines[idx:idx+record_line_count]]
        out_f.write(','.join(record_segments) + '\n')

# 现在可以正常用pandas读取
import pandas as pd
df = pd.read_csv('标准格式.csv')

如果记录行数不固定,但用空行分隔每条记录,调整脚本逻辑:

with open('原始数据.csv', 'r', encoding='utf-8') as in_f, open('标准格式.csv', 'w', encoding='utf-8') as out_f:
    current_record = []
    for line in in_f:
        stripped_line = line.strip()
        if stripped_line:
            current_record.append(stripped_line)
        else:
            if current_record:
                out_f.write(','.join(current_record) + '\n')
                current_record = []
    # 处理文件末尾的最后一条记录
    if current_record:
        out_f.write(','.join(current_record) + '\n')

方案2:直接读取并转换为DataFrame(无需中间文件)

用Python内置的csv模块逐行处理,直接生成DataFrame:

import pandas as pd
import csv

records = []
current_record = []

with open('原始数据.csv', 'r', encoding='utf-8') as f:
    csv_reader = csv.reader(f)
    for row in csv_reader:
        # 非空行属于当前记录,空行触发记录保存
        if row:
            current_record.extend(row)
        else:
            if current_record:
                records.append(current_record)
                current_record = []
    # 处理最后一条无空行结尾的记录
    if current_record:
        records.append(current_record)

# 手动指定表头(根据你的实际列名修改)
df = pd.DataFrame(records, columns=['列名1', '列名2', '列名3', '列名4', ...])

注意事项

  • 预处理前要先明确你的记录分隔规则:是固定行数,还是用特定字符/空行分隔,这是脚本逻辑的核心依据。
  • 如果原始文件里有逗号等CSV特殊字符,建议用csv.writer替代直接字符串拼接,避免格式错误。

内容的提问来源于stack exchange,提问作者Redgren Grumbholdt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:18:09