Python更快地导入csv到dict



我想导入多个csv文件到字典中。不幸的是,我的解决方案非常缓慢。我该如何优化代码?

提前感谢!:)

dats = os.listdir(path) #file_names
dat_names = [i.split(sep = "_")[0] for i in dats ] #should be key in dict
PFC_Dict = {}
i = 0
while i < len(dats):
PFC_Dict[dat_names[i]] = pd.read_csv(str(path + str(dats[i])), sep =";", parse_dates= True, index_col=(0), names = ["Preis"], decimal =",", dayfirst  =True ).resample("15min").ffill()
i =+ 1 

编辑:附加信息:

  • 导入文件数:~10个文件
  • 文件大小:~ 1mb, CSV格式:(160000,1)
  • 背景:

分析的结果应该是以下形式的数据帧:

  • 显示文件名的索引
  • 列表示不同计算场景(不同参数)

文件由日期时间索引&相应的价格。这些文件有不同的开始日期和不同的价格,因为这些是预测。

我将根据这些数据的开始日期合并不同数据上的这些数据帧。使用每个文件的单独数据框,我可以很容易地找到开始日期,因为它的索引[0]。另一方面,如果我对所有文件使用一个数据帧,我认为查找每个文件的开始日期并不容易。

读取csv是一个缓慢的过程,因为csv是为了供人类阅读的。最有效的文件格式是.feather。幸运的是,Pandas内置了对羽毛文件的支持:

.read_csv()—>.read_feather()

.to_csv()—>.to_feather()

运行一次脚本,将所有.csv文件转换为.feather。为此,循环遍历所有csv文件并使用pd.read_csv()读取它们。接下来使用df.to_feather()导出。

当你现在运行你的代码时,它应该可以更快地读取.feather文件。对于我来说,我有一个数据文件,以csv格式读取需要30秒,以羽毛文件格式读取需要1到2秒。

问题不在于代码的速度或数据的大小。只是代码有问题。我循环遍历了导入文件的列表,长度为I

i =+ 1

显然应该是i += 1。否则,它将无限循环遍历列表。

谢谢你的回复!

我个人喜欢pathlib处理文件路径。你可以这样做:

from pathlib import Path
import pandas as pd
# creates a posix path
folder_path = Path('/your/folder/')
# iterates through the directory and puts everything in a list
file_list = list(folder_path.iterdir())
PFC_Dict = {}
# iterate through the list and add items into the dict
for file in file_list:
PFC_Dict[file.stem.split('_')[0]] = pd.read_csv(file)

这样就不需要运行计数器。也许是你未来任务的解决方案

相关内容

  • 没有找到相关文章

最新更新