我想用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
虽然这样运行,但我认为它实际上不会加快读取文件的过程。有没有更有效的方法来实现这一目标?
答案 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,因此可以检查你是否有最新的版本。