gpt4 book ai didi

python - 将多个 csv 文件连接成具有相同标题的单个 csv - Python

转载 作者:太空狗 更新时间:2023-10-29 17:42:10 24 4
gpt4 key购买 nike

我目前正在使用以下代码导入 6,000 个 csv 文件(带有标题)并将它们导出到单个 csv 文件(带有单个标题行)。

#import csv files from folder
path =r'data/US/market/merged_data'
allFiles = glob.glob(path + "/*.csv")
stockstats_data = pd.DataFrame()
list_ = []

for file_ in allFiles:
df = pd.read_csv(file_,index_col=None,)
list_.append(df)
stockstats_data = pd.concat(list_)
print(file_ + " has been imported.")

这段代码运行良好,但速度很慢。最多可能需要 2 天的时间来处理。

我得到了一个用于终端命令行的单行脚本,它执行相同的操作(但没有标题)。此脚本需要 20 秒。

 for f in *.csv; do cat "`pwd`/$f" | tail -n +2 >> merged.csv; done 

有人知道如何加快第一个 Python 脚本的速度吗?为了缩短时间,我考虑过不将其导入 DataFrame 而只是连接 CSV,但我无法弄清楚。

谢谢。

最佳答案

如果您不需要内存中的 CSV,只需从输入复制到输出,那么完全避免解析会便宜很多,并且复制时不会在内存中建立:

import shutil
import glob


#import csv files from folder
path = r'data/US/market/merged_data'
allFiles = glob.glob(path + "/*.csv")
allFiles.sort() # glob lacks reliable ordering, so impose your own if output order matters
with open('someoutputfile.csv', 'wb') as outfile:
for i, fname in enumerate(allFiles):
with open(fname, 'rb') as infile:
if i != 0:
infile.readline() # Throw away header on all but first file
# Block copy rest of file from input to output without parsing
shutil.copyfileobj(infile, outfile)
print(fname + " has been imported.")

就是这样; shutil.copyfileobj处理有效地复制数据,显着减少 Python 级别的解析和重新序列化工作。

这假设所有 CSV 文件都具有相同的格式、编码、行尾等,并且标题不包含嵌入的换行符,但如果是这种情况,它会比替代方案快得多。

关于python - 将多个 csv 文件连接成具有相同标题的单个 csv - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44791212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com