熊猫替换数据框速度慢

尼尔

我有一个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秒。有什么办法可以加快速度吗?这不是庞大的数据或任务,我希望熊猫的移动速度更快。仅供参考,我尝试使用CSV中的相同文件进行相同的处理,但是节省的时间很少(在上大约为50秒replace()

海盗

策略
创建pd.Series表示map从文件名到文件名。
stack我们的数据框map,然后unstack

建立

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 5数据帧

在此处输入图片说明

100 x 100

在此处输入图片说明

9500 x 800

在此处输入图片说明

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

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章