使用Pandas将CSV转XLS时COL3列头部缺失的问题求助
问题分析与修复方案
核心问题
- 分隔符配置错误:你的CSV文件是空格/多空格分隔,但脚本中设置了
sep="|",导致Pandas无法正确拆分列,COL3的内容被错误识别,整列被判定为空值。 - 不必要的列删除操作:
dropna(axis=1, how="all")会删除所有行均为空的列,由于前面解析错误导致COL3被判定为全空,最终被移除,所以XLS中看不到该列头。
修复后的脚本
import os import pandas as pd os.chdir("/dev/test/test01/sub/subdir01/") # 读取CSV:修正分隔符,移除dropna操作 col_names = ["COL1", "COL2", "COL3"] # 使用正则匹配任意空白字符作为分隔符,适配多空格场景 df_new = pd.read_csv( "test_report.csv", quotechar='"', names=col_names, sep=r"\s+", # 替换原sep="|",匹配任意数量空格/制表符 skiprows=1, low_memory=False, error_bad_lines=False, header=None ) # 保存XLSX文件 file = f"test_report{pd.Timestamp('now').strftime('%Y%m%d_%I%M')}.xlsx" df_new.to_excel(file, index=False)
额外说明
- 如果你的CSV原表头和
col_names完全一致,也可以简化读取逻辑,直接用原表头,无需手动指定names和skiprows:df_new = pd.read_csv( "test_report.csv", sep=r"\s+", low_memory=False, error_bad_lines=False ) - 若后续有保留
dropna的需求,但不想删掉含部分非空值的列,可调整参数为how="any",或通过subset指定保留列,但此场景下直接移除该操作更贴合需求。
内容的提问来源于stack exchange,提问作者Jenifer
相关产品推荐
相关产品推荐

