将多个csv文件读取到Pandas数据框中

Wat*_*y62 4 python csv dataframe pandas

我正在尝试将多个CSV文件读取到Pandas数据框中。CSV不会以逗号分隔-字段以分号“;”分隔。

我的代码基于此处的答案。

我的数据全部在一个特定的子目录中: /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)
Run Code Online (Sandbox Code Playgroud)

count_files用来监视它是否是第一个CSV-在这种情况下,我将导入标头。否则,它会跳过标题。

该代码执行确定。

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

big_frame.info()
Run Code Online (Sandbox Code Playgroud)

输出:

RangeIndex:146个条目,0到145
数据列(**总共12列** s):
sensor_id 146非空int64
sensor_type 146非空对象
等等......

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

输出4个文件:

范围索引:1893个条目,0到1892
数据列(总计** 33列**):
-2.077 1164非空float64
-2.130 145非空float64
2.40 145非空float64

big_frame.head()在单个CSV版本上运行可以提供正确的列名:

导入单个CSV的输出

在运行相同的导入四个文件的情况下,这给了我:

导入4个CSV文件的输出(正确裁剪)

我在做什么,这不仅导致行数增加,而且导致列数增加吗?

您的指导将不胜感激!

aso*_*uin 5

当前不起作用的原因是当您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)
Run Code Online (Sandbox Code Playgroud)