Pandas-将CSV读取到FOR循环中的数据帧,然后附加到主DF是返回一个空白DF



我已经搜索了大约一个小时来寻找答案,但我找到的解决方案都不起作用。我试图将一个装满csv的文件夹放到一个数据帧中,输出到一个大的csv中。这是我当前的代码:

import os
sourceLoc = "SOURCE"
destLoc = sourceLoc + "MasterData.csv"
masterDF = pd.DataFrame([])
for file in os.listdir(sourceLoc):
workingDF = pd.read_csv(sourceLoc + file)
print(workingDF)
masterDF.append(workingDF)

print(masterDF)

SOURCE是一个文件夹路径,但我不得不删除它,因为它是一个工作网络路径。循环将CSV读取到workingDF变量,因为当我运行它时,它将数据打印到控制台中,但它也为每个文件找到349行。它们中没有一个包含那么多行数据。

当我打印masterDF时,它会打印Empty DataFrame Columns: [] Index: []

我的代码来自这个解决方案,但该示例使用的是xlsx文件,我不确定需要进行哪些更改(如果有的话(才能使其与CSV一起使用。append和read_csv上的Pandas文档非常有限,没有表明我做错了什么。

如有任何帮助,我们将不胜感激。

您的代码有一些错误,但最主要的是pd.append返回了一个新的数据帧,而不是原地修改。所以你必须做:

masterDF = masterDF.append(workingDF)

我也喜欢I_Al所采用的方法——thamary-concat可能会更快。

最后,我建议您不要使用glob,而是查看pathlib

import pandas as pd
from pathlib import Path
path = Path("your path")
df = pd.concat(map(pd.read_csv, path.rglob("*.csv"))))

您可以使用glob

import glob
import pandas as pd
import os
path = "your path"
df = pd.concat(map(pd.read_csv, glob.glob(os.path.join(path,'*.csv'))))
print(df)

您可以将它们全部存储在一个列表中,最后pd.concat

dfs = [
pd.read_csv(os.path.join(sourceLoc, file)) 
for file in os.listdir(sourceLoc)
]
masterDF = pd.concat(df)

最新更新