使用Pandas读取列数不规则的CSV文件报错的原因及解决方法咨询
Pandas读取列数不规则的CSV文件报错的原因及解决方法咨询
嗨,我来帮你分析并解决这个问题:
报错原因
你的CSV文件每行的字段数量不一致,这就是触发报错的核心原因。
Pandas默认会根据CSV的第一行(这里第一行是"==CNAME==",仅1个字段)推断整个文件的列数,认定这是个单列文件。但到第3行("Tool Name","v2.1")突然出现了2个字段,和之前推断的列数不匹配,就触发了Error tokenizing data的错误——它期望每行都是1个字段,结果看到了2个,自然解析失败。
你之前尝试指定分隔符没用,是因为问题根本不是分隔符识别错误,而是列数不统一的问题。
解决方法
根据不同的需求,我给你两种实用的处理方案:
方案1:保留所有行的原始结构(不管列数多少)
如果你想把CSV里的所有内容原样导入Excel,包括空行和列数不一的行,可以用Python内置的csv模块先逐行读取处理,再转成DataFrame:
import pandas as pd import os import csv def convert_csv_to_xlsx(csv_file_path): csv_file = r"C:\Users\aztec\Desktop\del.csv" rows = [] # 用csv模块逐行读取,能正确处理带引号的字段分割 with open(csv_file, 'r', encoding='utf-8') as f: reader = csv.reader(f) for row in reader: rows.append(row) # 转成DataFrame,短行自动用NaN填充缺失列 df_csv = pd.DataFrame(rows) excel_file = os.path.splitext(csv_file)[0] + '.xlsx' # 导出时不添加默认表头和索引,保持原始内容结构 df_csv.to_excel(excel_file, index=False, header=False) return excel_file
方案2:只提取有效键值对行(过滤无效行)
如果你只需要CSV里那些类似"Tool Name","v2.1"的键值对数据,可以过滤掉只有1个字段或空的行:
import pandas as pd import os import csv def convert_csv_to_xlsx(csv_file_path): csv_file = r"C:\Users\aztec\Desktop\del.csv" valid_rows = [] with open(csv_file, 'r', encoding='utf-8') as f: reader = csv.reader(f) for row in reader: # 只保留有2个非空字段的有效行 if len(row) == 2 and row[0].strip() and row[1].strip(): valid_rows.append(row) # 转成带自定义列名的DataFrame df_csv = pd.DataFrame(valid_rows, columns=["属性", "值"]) excel_file = os.path.splitext(csv_file)[0] + '.xlsx' df_csv.to_excel(excel_file, index=False) return excel_file
这种处理后,Excel里会只保留有用的键值对数据,比如姓名、邮箱、电话这些内容,结构更清晰易读。
备注:内容来源于stack exchange,提问作者Ξ R Λ Z Ξ R
相关产品推荐
相关产品推荐

