将多个csv文件读入Pandas数据框

时间:2018-05-15 13:46:26

标签: python pandas csv dataframe multiple-files

我正在尝试将多个CSV文件读入Pandas数据框。 CSV不以逗号分隔 - 字段由分号";"分隔。

我的代码基于答案here

我的数据全部位于特定的子目录中:List is null

这就是我的目的:

/data/luftdaten/5331

我使用import glob import pandas as pd path =r'data/luftdaten/5331' # use your path filenames = glob.glob(path + "/*.csv") count_files = 0 dfs = [] for filename in filenames: if count_files ==0: dfs.append(pd.read_csv(filename, sep=";")) count_files += 1 else: dfs.append(pd.read_csv(filename, sep=";", skiprows=[0])) count_files +=1 big_frame = pd.concat(dfs, ignore_index=True) 来监控它是否是第一个CSV - 在这种情况下我会导入标头。否则,它会跳过标题。

代码执行正常。

如果我在该目录中使用单个文件运行它,一切都很好:

count_files

输出:

RangeIndex: 146 entries, 0 to 145
Data columns (**total 12 column**s):
sensor_id      146 non-null int64
sensor_type    146 non-null object
etc......

如果我在目录中运行2个或更多文件,那么从一开始就会出错。

输出4个文件:

RangeIndex: 1893 entries, 0 to 1892
Data columns (total **33 columns**):
-2.077                 1164 non-null float64
-2.130                 145 non-null float64
2.40                   145 non-null float64

在单个CSV版本上运行big_frame.info() 会为此提供正确的列名:

output from importing single CSV

使用导入的四个文件运行相同的操作时,我会这样做:

output from importing 4 CSV files (cropped right)

我有什么明显的事情,这不仅会导致行数增长,还会导致列数增加吗?

非常感谢您的指导!

1 个答案:

答案 0 :(得分:4)

它当前无法正常工作的原因是当您在第一个文件之后对每个文件执行skiprows=[0]时,新数据框的第二个(索引1)行用作列标题。因此,当帧连接时,有许多列标题不匹配。如果您删除了skiprows=[0]它应该有效。

假设您的所有文件都有相同的标题(或者当它们不同时您可以使用NaN),您应该可以在单行中执行此操作:

big_frame = pd.concat([pd.read_csv(f, sep=';') for f in glob.glob(path + "/*.csv")],
                      ignore_index=True)