读取多CSV文件指定列异常:数据重复/错乱的排查求助
问题原因分析
1. 使用names参数导致列值重复
你的CSV文件本身带有表头行(包含LOCALTIME、Flow_filter的行),但names参数是用来给无表头的CSV指定列名的。当你同时指定usecols和names时,pandas会把原文件的表头行当成普通数据行,再用你传入的names作为新列名。加上你后续删除前3行,有效数据和表头行混在一起,最终导致列值重复。
2. 移除names参数后LOCALTIME列错乱
你执行的df_vent.drop([0,1,2], axis=0)说明每个CSV的前3行是无效的说明内容,并非数据行。移除names参数后,pandas默认把第0行(原文件的第一行说明)当作表头,这会让后续列的对应关系完全错位,LOCALTIME自然会混入无关数值。
解决方法
正确的做法是跳过前3行无效内容,指定第4行(索引从0开始为第3行)作为表头,不需要使用names参数。修正后的代码如下:
import glob import os import pandas as pd csv_files = glob.glob(os.path.join("C:/User/Documents/Auswertung/2/Vent_2022/*.csv")) frames = [] for file in csv_files: # 跳过前3行无效内容,用第4行作为表头读取指定列 df = pd.read_csv( file, sep=';', low_memory=False, usecols=['LOCALTIME', 'Flow_filter'], skiprows=3, # 跳过前3行非数据内容 header=0 # 此时第4行成为新的表头行 ) frames.append(df) df_vent = pd.concat(frames, ignore_index=True) display(df_vent)
补充提示
- 可以先单独读取一个CSV的前10行(
pd.read_csv(csv_files[0], sep=';', nrows=10)),确认表头所在的准确行号,调整skiprows的数值。
内容的提问来源于stack exchange,提问作者snkm
相关产品推荐
相关产品推荐

