【问题标题】:How to read .xls in parallel using pandas?如何使用 pandas 并行读取 .xls?
【发布时间】:2015-07-21 22:59:29
【问题描述】:

我想使用 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

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

【问题讨论】:

  • 读取 excel 任务是 I/O 密集型问题而不是 CPU 密集型问题,我不认为并行可以过多地加快您的任务。
  • 是否有更好的方法可以更快地读取大文件?

标签: python pandas parallel-processing


【解决方案1】:

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

您的文件有多大,读取它需要多长时间? 这将有助于更好地理解问题。 你的excel表格很复杂吗?也许 read_excel 难以处理这种复杂性?

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

【讨论】:

    猜你喜欢
    • 2019-02-08
    • 2016-02-01
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多