Python合并列名不一致的CSV文件及编码报错解决求助
解决CSV合并的编码问题与列对齐方案
一、修复UnicodeDecodeError编码错误
出现该错误是因为指定的编码(cp1252)无法解析文件中的部分字符,可通过以下方式解决:
- 优先尝试UTF-8编码读取:
df_file = pd.read_csv(csvfile, encoding='utf-8') - 若仍报错,添加错误处理参数替换/忽略无法解码的字符:
df_file = pd.read_csv(csvfile, encoding='cp1252', errors='replace') - 备选方案:使用
latin-1编码,它能兼容所有字节(不会报错,但部分特殊字符可能显示异常):df_file = pd.read_csv(csvfile, encoding='latin-1')
二、合并列名不统一的CSV文件
Pandas的pd.concat()原生支持自动对齐不同列的DataFrame,无需预先创建空表。如果需要强制保留指定列(Header1、Header2、Header3、Header4),可在读取后筛选目标列,缺失列会自动填充NaN。
修正后的完整代码
import pandas as pd import glob # 预定义需要保留的目标列 TARGET_COLUMNS = ['Header1', 'Header2', 'Header3', 'Header4'] # CSV文件路径 data_location = 'C:\\Tableau Reports\\ST Database\\Files\\Downloads\\CSV Files\\*.csv' csv_files = glob.glob(data_location) # 存储所有读取后的DataFrame df_list = [] for csv_file in csv_files: # 处理编码问题,可根据实际情况调整编码参数 df = pd.read_csv(csv_file, encoding='latin-1') # 筛选目标列,缺失列自动补NaN df_filtered = df[TARGET_COLUMNS] df_list.append(df_filtered) # 合并所有DataFrame,重置索引避免重复 combined_df = pd.concat(df_list, ignore_index=True) print(combined_df)
关键说明
- 若不需要强制保留指定列,删除
df_filtered = df[TARGET_COLUMNS]一行即可,pd.concat()会自动保留所有出现过的列。 ignore_index=True参数会重置合并后的索引,避免出现重复索引问题。
内容的提问来源于stack exchange,提问作者Muhammad Adeel Ahmed
相关产品推荐
相关产品推荐

