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

列名不同的DataFrame拼接及CSV读取分词错误解决咨询

解决CSV读取报错与多列不一致DataFrame拼接问题

一、先搞定Error tokenizing data的CSV读取问题

这个报错说白了就是你的CSV文件格式乱了——第4行本来应该和表头字段数一致,但实际读出了更多字段,大概率是某行的分隔符用错了,或者有未闭合的引号、换行符搞乱了格式。给你几个靠谱的解决办法:

  • 跳过错误行+确认分隔符:如果只是个别行有问题,直接用on_bad_lines='skip'跳过就行,同时确认你的CSV确实是用逗号分隔的(有时候会不小心用制表符\t,这时候要改成sep='\t'):
    df = pd.read_csv(csvfile, sep=',', encoding='utf-8', on_bad_lines='skip')
    
  • 换用Python引擎处理:pandas默认的C引擎速度快但容错差,换成Python引擎能处理更多格式问题,配合跳过错误行效果更好:
    df = pd.read_csv(csvfile, sep=',', encoding='utf-8', engine='python', on_bad_lines='skip')
    
  • 手动检查CSV文件:如果允许的话,直接打开CSV看看第4行的内容,是不是有未闭合的引号(比如某字段里的逗号没加引号包裹),手动修正后再读取最稳妥。

二、处理不同列的DataFrame拼接问题

你提到df1有Apple、Banana列,df2多了个Carrot列,拼接其实很简单,但你的现有代码有个明显错误:pd.concat(df)完全没必要——df本身就是DataFrame,pd.concat需要的是DataFrame的列表,不是单个DataFrame。

正确的拼接代码示例:

import pandas as pd
import os

# 先收集所有要拼接的DataFrame到列表里
df_list = []
# 假设你有多个CSV文件,替换成你的实际文件路径列表
target_csvs = ["df1.csv", "df2.csv"]

for csv_path in target_csvs:
    if os.path.exists(csv_path):
        # 先解决上面的CSV读取问题,读取单个DataFrame
        single_df = pd.read_csv(csv_path, sep=',', encoding='utf-8', on_bad_lines='skip')
        # 直接把单个DataFrame加到列表里,别搞pd.concat(df)!
        df_list.append(single_df)

# 最后一次性拼接所有DataFrame,ignore_index=True重置索引避免重复
result_df = pd.concat(df_list, ignore_index=True)

补充:处理缺失列的填充

拼接后,df1没有的Carrot列会自动填充NaN,如果需要给这些缺失值设默认值(比如0或者空字符串),直接加个fillna就行:

# 用0填充所有缺失值
result_df = pd.concat(df_list, ignore_index=True).fillna(0)
# 或者用空字符串填充
result_df = pd.concat(df_list, ignore_index=True).fillna("")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:38:09