我的电脑上有一个脚本,可以从网络共享驱动器读取文件(.xlsx、.csv)。由于网络的原因,对读取时间的依赖性很高,它可以从 150 秒开始。到 400 秒
我试图加快这个过程,但是我的一个限制是我不能改变格式,所以它必须是 xlsx 格式或 csv。不幸的是,至少现在还不能选择其他格式,例如 HDF5。
这是目前导入文件的方式:
import pandas as pd
df1 = pd.read_csv(r'\...\path_to_file', sep='\t', header=0,
compression='zip')
df2 = pd.read_excel(r'\...\path_to_file',
skiprows=9, usecols="D:T", na_values='N/A')
df3 = pd.read_excel(r'\...\path_to_file',
skiprows=12, usecols="C:M",
na_values='N/A')
df4 = pd.read_excel(r'\...\path_to_file',
skiprows=9, usecols="C:P", na_values='N/A')
我已经尝试过(对 concurrent.futures.ProcessPoolExecutor 是如何工作的有很多疑问)concurrent.futures 模块。我会说我看到阅读时间有了显着改善,但这也取决于我之前在网络上提到的。
这是实现:
import concurrent.futures
import pandas as pd
def imp1():
df1 = pd.read_csv(r'\...\path_to_file', sep='\t', header=0,
compression='zip')
return df1
def imp2():
df2 = pd.read_excel(r'\...\path_to_file',
skiprows=9, usecols="D:T", na_values='N/A')
return df2
def imp3()
df3 = pd.read_excel(r'\...\path_to_file',
skiprows=12, usecols="C:M",
na_values='N/A')
return df3
def imp4():
df4 = pd.read_excel(r'\...\path_to_file',
skiprows=9, usecols="C:P", na_values='N/A')
return df4
funct_list = [imp1,imp2,imp3,imp4]
if __name__ == '__main__':
listalis = []
with concurrent.futures.ProcessPoolExecutor() as exe:
for f in funct_list:
listalis.append(exe.submit(f))
test = [x.result() for x in concurrent.futures.as_completed(listalis)]
test1 = test
df1, df2, df3, df4 = test1
这种性能改进是否与并行加载文件有关?我只是在寻找代码实现对这个用例有意义的确认。
欢迎任何反馈。
谢谢!