【发布时间】:2019-06-16 00:02:43
【问题描述】:
我有一个需求,我有三个输入文件,需要将它们加载到 Pandas 数据框中,然后将其中两个文件合并到一个数据框中。
文件扩展名总是变化的,一次可能是 .txt,另一次可能是 .xlsx 或 .csv。
我怎样才能并行运行这个过程,以节省等待/加载时间?
这是我目前的代码,
from time import time # to measure the time taken to run the code
start_time = time()
Primary_File = "//ServerA/Testing Folder File Open/Report.xlsx"
Secondary_File_1 = "//ServerA/Testing Folder File Open/Report2.csv"
Secondary_File_2 = "//ServerA/Testing Folder File Open/Report2.csv"
import pandas as pd # to work with the data frames
Primary_df = pd.read_excel (Primary_File)
Secondary_1_df = pd.read_csv (Secondary_File_1)
Secondary_2_df = pd.read_csv (Secondary_File_2)
Secondary_df = Secondary_1_df.merge(Secondary_2_df, how='inner', on=['ID'])
end_time = time()
print(end_time - start_time)
加载 primary_df 和 secondary_df 大约需要 20 分钟。因此,我正在寻找一种可能使用并行处理来节省时间的有效解决方案。 我是通过Reading操作计时的,大部分时间大约是18分45秒。
硬件配置:- Intel i5 处理器、16 GB 内存和 64 位操作系统
有资格获得赏金的问题:- 因为我正在寻找工作 包含详细步骤的代码 - 在 anaconda 中使用 包 支持加载我的输入文件的环境 并行和 将它们分别存储在熊猫数据框中。这最终应该 节省时间。
【问题讨论】:
-
你至少有3个选项; asyncio,线程,多进程,但我不确定这些选项是否会给你足够的性能。您需要查看读取操作是否占用大部分时间(在这种情况下,上述选项应该对您有所帮助)或者是否在内存中创建数据帧占用大部分时间。
-
考虑使用 dask (docs.dask.org/en/latest/why.html) 作为 pandas 的替代品。
-
你有什么样的硬件?如果瓶颈是磁盘 I/O,我不确定如何解决此问题。
-
@Logan 是的,英特尔 i5 处理器,16 GB 内存和 64 位操作系统。
-
您受 IO 限制,无法绕过它。加载时间就是加载时间。