将多个 CSV 文件合并到一个数据帧中

问题描述 投票:0回答:1

我正在尝试连接一个 df 中文件夹中的 csv 文件(具有相同的标题),但在读取文件时得到一个空列表:

from pathlib import Path  

path = '//Users//Directory//'
files = Path(path + "dirtest//").glob('*.csv')

如果我打印文件名,我会得到正确的:

for f in files:
     print(f.name)

filename1.csv
filename2.csv
filename3.csv

但是当我尝试读取它们并将 sem 附加到列表中时,它返回一个空列表:

dfs = []
dfs = [pd.read_csv(f) for f in files]
dfs

[]

接下来的步骤是将列表连接到 df 中,但我无法访问它,因为列表是空的:

base_renov = pd.concat(dfs, ignore_index=True)

有人可以帮我吗?

pandas dataframe csv
1个回答
0
投票

Path.glob
返回一个生成器。一旦打印列表中的值,就会耗尽生成器:

for f in files:
     print(f.name)

您应该直接将此传递给

read_csv
:

files = Path(path + "dirtest//").glob('*.csv')

base_renov = pd.concat(map(pd.read_csv, files), ignore_index=True)

或者,作为一句台词:

base_renov = pd.concat(map(pd.read_csv, Path('//Users//Directory//').glob('*.csv')), ignore_index=True)

如果你确实想使用循环(例如,如果你有其他操作要执行),请首先将生成器转换为列表:

files = list(Path(path + "dirtest//").glob('*.csv'))

for f in files:
     print(f.name)
dfs = [pd.read_csv(f) for f in files]

base_renov = pd.concat(dfs, ignore_index=True)

或者,在循环中创建

dfs

files = list(Path(path + "dirtest//").glob('*.csv'))

dfs = []
for f in files:
     print(f.name)
     dfs.append(pd.read_csv(f))

base_renov = pd.concat(dfs, ignore_index=True)
© www.soinside.com 2019 - 2024. All rights reserved.