如何使用 Pandas 并行读取 .xls?

Gma*_*man 5 python parallel-processing pandas

我想使用 Pandas 并行读取一个大的 .xls 文件。目前我正在使用这个:

LARGE_FILE = "LARGEFILE.xlsx"
CHUNKSIZE = 100000 # processing 100,000 rows at a time

def process_frame(df):
      # process data frame
      return len(df)

if __name__ == '__main__':
      reader = pd.read_excel(LARGE_FILE, chunksize=CHUNKSIZE)
      pool = mp.Pool(4) # use 4 processes

      funclist = []
      for df in reader:
              # process each data frame
              f = pool.apply_async(process_frame,[df])
              funclist.append(f)

      result = 0
      for f in funclist:
              result += f.get(timeout=10) # timeout in 10 seconds
Run Code Online (Sandbox Code Playgroud)

虽然这会运行,但我认为它实际上并没有加快读取文件的过程。有没有更有效的方法来实现这一目标?

小智 1

仅供参考:我正在大约 4 秒内读取 13 MB、29000 行 csv。(不使用并行处理)Archlinux、AMD Phenom II X2、Python 3.4、python-pandas 0.16.2。

您的文件有多大以及读取它需要多长时间?这将有助于更好地理解问题。您的 Excel 工作表非常复杂吗?也许 read_excel 难以处理这种复杂性?

建议:安装 gnumeric 并使用辅助函数 ssconvert 将文件转换为 csv。在您的程序中更改为 read_csv。检查 ssconvert 使用的时间和 read_csv 花费的时间。顺便说一句,python-pandas 从版本 13 .... 16 开始有了重大改进,因此有助于检查您是否拥有最新版本。