我正在尝试将多个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()
会为此提供正确的列名:
使用导入的四个文件运行相同的操作时,我会这样做:
我有什么明显的事情,这不仅会导致行数增长,还会导致列数增加吗?
非常感谢您的指导!
答案 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)