pandasdataframe更换速度缓慢

我有一个Excel文件(.xlsx),大约有800行,128列,网格中的数据非常密集。 大约有9500个单元我试图用Pandas数据框取代单元格的值:

xlsx = pandas.ExcelFile(filename) frame = xlsx.parse(xlsx.sheet_names[0]) media_frame = frame[media_headers] # just get the cols that need replacing from_filenames = get_from_filenames() # returns ~9500 filenames to replace in DF to_filenames = get_to_filenames() media_frame = media_frame.replace(from_filenames, to_filenames) frame.update(media_frame) frame.to_excel(filename) 

replace()需要60秒。 任何方式来加速呢? 这不是一个庞大的数据或任务,我期待大pandas的动作要快得多。 仅供参考我试着用同样的文件在CSV中做同样的处理,但节省的时间是最less的( replace()约50秒)

战略
创build代表从文件名到文件名的map pd.Series
stack我们的数据框, map ,然后unstack stack

build立

 import pandas as pd import numpy as np from string import letters media_frame = pd.DataFrame( pd.DataFrame( np.random.choice(list(letters), 9500 * 800 * 3) \ .reshape(3, -1)).sum().values.reshape(9500, -1)) u = np.unique(media_frame.values) from_filenames = pd.Series(u) to_filenames = from_filenames.str[1:] + from_filenames.str[0] m = pd.Series(to_filenames.values, from_filenames.values) 

 media_frame.stack().map(m).unstack() 

定时

5 x 5dataframe

在这里输入图像描述

100 x 100

在这里输入图像描述

9500 x 800

在这里输入图像描述

9500 x 800
map使用seriesdict
d = dict(zip(from_filenames, to_filenames))

在这里输入图像说明

我通过一次删除replace()和一次使用set_value()一个元素来完成60秒的任务。