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

时间:2015-07-21 22:59:30

标签: python pandas parallel-processing

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

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

1 个答案:

答案 0 :(得分:0)

仅供参考:我在大约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,因此可以检查你是否有最新的版本。