将文件夹的多个 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,这会节省我几分钟的时间,而且我觉得很熟悉。
谢谢你的想法。
我有多个 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,这会节省我几分钟的时间,而且我觉得很熟悉。
谢谢你的想法。