如何用非规整列数的空格分隔CSV填充指定表头的空Pandas DataFrame
解决方案
核心逻辑
读取File2后,只保留与File1目标表头重叠的列,再将筛选后的数据填充到目标表中,彻底忽略多余列。
修正后的代码示例
import pandas as pd # 定义目标表头(与File1一致) target_columns = ['item', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'] # 读取空的目标表File1 df_target = pd.DataFrame(columns=target_columns) # 读取列数不均的空格分隔文件File2 df_source = pd.read_csv('File2.csv', sep=r'\s+') # 关键:筛选出File2中与目标表头匹配的列,自动丢弃多余列 filtered_source = df_source[df_source.columns.intersection(target_columns)] # 将筛选后的数据填充到目标表 df_final = pd.concat([df_target, filtered_source], ignore_index=True) # 保存填充后的结果(可选) df_final.to_csv('File1_filled.csv', index=False)
特殊场景处理
- 表头大小写不匹配:如果File2表头和目标表头存在大小写差异,先统一格式再筛选:
# 统一为小写 df_source.columns = df_source.columns.str.lower() target_cols_lower = [col.lower() for col in target_columns] filtered_source = df_source[df_source.columns.intersection(target_cols_lower)] # 恢复目标表头格式 filtered_source.columns = [col for col in target_columns if col.lower() in filtered_source.columns] - File2无表头:若File2第一行就是数据,需先指定临时表头再筛选:
# 给File2临时加表头,多余列用占位符命名 df_source = pd.read_csv('File2.csv', sep=r'\s+', names=target_columns + [f'extra_{i}' for i in range(10)]) filtered_source = df_source[df_source.columns.intersection(target_columns)]
内容的提问来源于stack exchange,提问作者Arun
相关产品推荐
相关产品推荐

