将文件夹的多个 csv 文件加载到一个数据框中

Loading multiple csv files of a folder into one dataframe

我有多个 csv 文件保存在一个文件夹中,具有相同的列布局,我想将其加载到 python 作为 pandas 中的数据框。

这个问题真的很像这个

我正在使用以下代码:

import glob
import pandas as pd
salesdata = pd.DataFrame()
for f in glob.glob("TransactionData\Promorelevant\*.csv"):
    appenddata = pd.read_csv(f, header=None, sep=";")
    salesdata = salesdata.append(appenddata,ignore_index=True)

是否有更好的解决方案?

这会花费很多时间。

谢谢

我建议使用列表理解 concat:

import glob
import pandas as pd

files = glob.glob("TransactionData\Promorelevant*.csv")
dfs = [pd.read_csv(f, header=None, sep=";") for f in files]

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

link to actual answer

的帮助下

这似乎是最好的班轮:

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

也许使用 bash 会更快:

head -n 1 "TransactionData/Promorelevant/0.csv" > merged.csv
tail -q -n +2 TransactionData/Promorelevant*.csv >> merged.csv

或者如果在 jupyter notebook 中使用

!head -n 1 "TransactionData/Promorelevant/0.csv" > merged.csv
!tail -q -n +2 "TransactionData/Promorelevant*.csv" >> merged.csv

想法是您不需要解析任何东西。

第一个命令复制其中一个文件的 header。 如果你没有 header,你可以跳过这一行。 Tail 跳过所有文件的 headers 并将它们添加到 csv。

在 Python 中附加可能更昂贵。

当然,使用 pandas 确保您的解析仍然有效。

pd.read_csv("merged.csv")

对你的基准感到好奇。

我检查了所有这些方法,除了 bash 带有时间功能的方法(只有一个 运行,还要注意文件在共享驱动器上)。

结果如下:

我的进场:1220.49

列表理解+连接:1135.53

concat+map+join: 1116.31

我会选择 list comphrension+concat,这会节省我几分钟的时间,而且我觉得很熟悉。

谢谢你的想法。