Pandas pd.read_csv指定sep=';'无法获取列对应值问题求助
CSV文件读取问题解决方案
问题描述
我正在开发一个批量读取多CSV文件、在指定时间范围汇总特定值的程序,待处理CSV采用分号(;)作为分隔符。使用以下代码读取文件:
df = pd.read_csv(file_path, sep=";", index_col=0) # 查找与目标列最接近的列 closest_column = find_closest_column(df, target_column) if closest_column: # 假设'Recipe'和最接近的列格式正确,继续分组 # grouped_df = df.groupby("Recipe")[closest_column].sum().reset_index() print(f"\nFile: {file_path}, Closest Column: {closest_column}\n") else: print(f"\nFile: {file_path}中未找到与'{target_column}'相似的列\n")
将其中一个文件分隔符改为逗号后,程序仅能识别逗号分隔文件的列值(输出列名带值),分号分隔文件仅能识别列名,无法获取对应值:
File: C:\Users\nw\Documents\Mini projects\CSV\test\656062f4cd3a83000200000a.csv, Closest Column: Total volume[m3],"0.1" File: C:\Users\nw\Documents\Mini projects\CSV\test\99-Card.csv, Closest Column: Total volume[m�]
调整sep/delimiter参数后问题仍未解决,需解决分号分隔CSV文件的数值读取问题。
解决方案
指定正确的文件编码
分号分隔文件可能存在编码不匹配(如Windows下常见的GBK或UTF-8带BOM),读取时显式指定编码:df = pd.read_csv(file_path, sep=";", index_col=0, encoding='utf-8-sig')若仍有乱码,尝试
encoding='gbk'。处理引号包裹的内容
部分CSV会用引号包裹列名或值,需指定引号处理规则,先导入csv模块:import csv df = pd.read_csv(file_path, sep=";", index_col=0, quoting=csv.QUOTE_ALL, encoding='utf-8-sig')可根据文件实际情况选择
csv.QUOTE_MINIMAL或csv.QUOTE_NONNUMERIC。手动指定列名读取
若自动识别列名失败,先读取第一行作为列名,再加载数据:with open(file_path, 'r', encoding='utf-8-sig') as f: headers = f.readline().strip().split(';') df = pd.read_csv(file_path, sep=";", names=headers, skiprows=1, index_col=0)处理混合分隔符
若文件存在分号、逗号混合的情况,用正则匹配分隔符(需指定engine='python'):df = pd.read_csv(file_path, sep='[;,]', engine='python', index_col=0, encoding='utf-8-sig')
内容的提问来源于stack exchange,提问作者ZeXVex
相关产品推荐
相关产品推荐

