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版本上运行可以提供正确的列名:
在运行相同的导入四个文件的情况下,这给了我:
我在做什么,这不仅导致行数增加,而且导致列数增加吗?
您的指导将不胜感激!
当前不起作用的原因是当您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)
| 归档时间: |
|
| 查看次数: |
4677 次 |
| 最近记录: |