我已经搜索了大约一个小时来寻找答案,但我找到的解决方案都不起作用。我试图将一个装满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)