gpt4 book ai didi

python - 将 1300 个数据帧合并为一个帧变得非常慢

转载 作者:行者123 更新时间:2023-12-04 03:51:24 25 4
gpt4 key购买 nike

我在一个目录中有 1300 个 csv 文件。
每个文件的第一列都有一个日期,然后是过去 20-30 年的每日数据,跨越另外 8 列。
所以像这样,
数据1.csv

Date source1 source2 source3 source4 source5 source6 source 7 source 8
我有 1300 个唯一命名的文件。
我正在尝试使用这样的 Pandas 将所有这些合并到一个数据帧中
import pandas as pd 
frame = pd.DataFrame()

length = len(os.listdir(filepath))
for filename in os.listdir(filepath):
file_path = os.path.join(filepath, filename)
print(length,end=" ")
df = pd.read_csv(file_path,index_col=0)
df = pd.concat([df[[col]].assign(Source=f'{filename[:-4]}-{col}').rename(columns={col: 'Data'}) for col in df])
frame = frame.append(df)
length-=1

但是在第 300 个文件附近我有大约 1200 万行,我的代码真的变慢了......
有没有办法在我的计算机内存不足之前加快速度。
我的目标实际上是拥有一个海量数据框,按 30 年的日期数量计算为 1+ (1300x8)。

最佳答案

您的循环变慢的原因是每个 .append() ,数据帧必须创建一个副本以分配更多内存,如 here 所述.
如果你的内存力可以容纳所有 ,您可以先用所有数据框填充一个固定大小(1300)的列表,然后使用 df = pd.concat(list_of_dataframes) ,这可能会避免您现在遇到的问题。您的代码可以这样调整:

import pandas as pd 
lst = [None for _ in range(1300)] # Creates empty list

for i, filename in enumerate(os.listdir(filepath)):
file_path = os.path.join(filepath, filename)
df = pd.read_csv(file_path,index_col=0)
df = pd.concat([df[[col]].assign(Source=f'{filename[:-4]}-{col}').rename(columns={col: 'Data'}) for col in df])
lst[i] = df


frame = pd.concat(lst)

关于python - 将 1300 个数据帧合并为一个帧变得非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64388874/

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