我正在尝试连接一个 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)
有人可以帮我吗?
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)