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

如何使用Pandas读取含异常分隔符的CSV并生成目标DataFrame

处理分号分隔CSV的列数不匹配问题,生成目标DataFrame

针对CSV表头列数与数据行不一致的问题,以下是两种基于Pandas的解决方案,能精准生成你需要的DataFrame结构:

方法一:逐行读取并处理

逻辑直观,可精准控制每一行的拆分与合并:

import pandas as pd

# 读取文件所有行
with open('data.csv', 'r', encoding='utf-8') as f:
    lines = f.read().splitlines()

# 提取表头
headers = lines[0].strip().split(';')

# 处理每一行数据
processed_data = []
for line in lines[1:]:
    parts = line.strip().split(';')
    # 根据拆分后的长度判断是否需要合并列
    if len(parts) == 5:
        processed_row = [parts[0], f"{parts[1]};{parts[2]}", parts[3], parts[4]]
    else:
        processed_row = parts
    processed_data.append(processed_row)

# 生成目标DataFrame
df = pd.DataFrame(processed_data, columns=headers)

方法二:临时读取后合并列

无需手动逐行循环,利用Pandas的行处理能力实现:

import pandas as pd

# 读取表头
headers = pd.read_csv('data.csv', sep=';', nrows=0).columns.tolist()

# 读取所有数据行(跳过表头,避免列数不匹配报错)
temp_df = pd.read_csv('data.csv', sep=';', header=None, skiprows=1)

# 定义行处理逻辑
def process_row(row):
    if len(row) >= 5:
        return pd.Series([row[0], f"{row[1]};{row[2]}", row[3], row[4]])
    else:
        return pd.Series(row[:4])

# 生成目标DataFrame
df = temp_df.apply(process_row, axis=1)
df.columns = headers

执行后得到的DataFrame结构如下:

col1        col2 col3 col4
0    4  hello;world    1    1
1    4          hi    1    1
2    4          hi    1    1
3    4          hi    1    1

内容的提问来源于stack exchange,提问作者Duccio Borchi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:55:21