在 pandas 中高效使用替换

2024-03-24

我正在寻找使用replace在 python3 中以有效的方式运行。我拥有的代码正在完成任务,但速度太慢,因为我正在处理大型数据集。因此,每当需要权衡时,我的首要任务是效率而不是优雅。这是我想做的一个玩具:

import pandas as pd
df = pd.DataFrame([[1,2],[3,4],[5,6]], columns = ['1st', '2nd'])

       1st  2nd
   0    1    2
   1    3    4
   2    5    6


idxDict= dict()
idxDict[1] = 'a'
idxDict[3] = 'b'
idxDict[5] = 'c'

for k,v in idxDict.items():
    df ['1st'] = df ['1st'].replace(k, v)

这使

     1st  2nd
   0   a    2
   1   b    4
   2   c    6

如我所愿,但这需要太长时间。最快的方法是什么?

编辑:这是一个比this https://stackoverflow.com/questions/41985566/pandas-replace-dictionary-slowness一,其解决方案类似。


use map http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.map.html#pandas.Series.map执行查找:

In [46]:
df['1st'] = df['1st'].map(idxDict)
df
Out[46]:
  1st  2nd
0   a    2
1   b    4
2   c    6

避免出现没有有效密钥可以通过的情况na_action='ignore'

您还可以使用df['1st'].replace(idxDict)但回答你关于效率的问题:

timings

In [69]:
%timeit df['1st'].replace(idxDict)
%timeit df['1st'].map(idxDict)

1000 loops, best of 3: 1.57 ms per loop
1000 loops, best of 3: 1.08 ms per loop

In [70]:    
%%timeit
for k,v in idxDict.items():
    df ['1st'] = df ['1st'].replace(k, v)

100 loops, best of 3: 3.25 ms per loop

所以使用map这里速度快了 3 倍以上

在更大的数据集上:

In [3]:
df = pd.concat([df]*10000, ignore_index=True)
df.shape

Out[3]:
(30000, 2)

In [4]:    
%timeit df['1st'].replace(idxDict)
%timeit df['1st'].map(idxDict)

100 loops, best of 3: 18 ms per loop
100 loops, best of 3: 4.31 ms per loop

In [5]:    
%%timeit
for k,v in idxDict.items():
    df ['1st'] = df ['1st'].replace(k, v)

100 loops, best of 3: 18.2 ms per loop

对于 30K 行 df,map大约快 4 倍,因此可扩展性比replace或循环

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 pandas 中高效使用替换 的相关文章

随机推荐

  • 为什么将 NaN 转换为 long 会产生有效结果?

    在下面的示例代码中 我除以零 当我使用调试器单步调试它时 被除数 除数 会产生无穷大或 NaN 如果除数为零 当我将此结果转换为 long 时 我会得到一个有效结果 通常类似于 9223372036854775808 为什么这个演员阵容有效
  • 在电子邮件中设置 tr 或 td 样式?

    我想更改整行单元格的背景颜色和字体大小 和内联样式 因为我不能使用样式表或
  • Xunit 多个 IClassFixtures

    我的问题是如何在一个测试类中设置多个装置 但是Zoo类的构造函数不能处理多个灯具 例如 public class Zoo IClassFixture
  • Symfony2 访问服务中的用户和学说

    我在很多控制器操作中运行与此代码等效的代码 基本上它会获取用户的用户名 如果该用户名附加到博客实体 它将允许用户查看博客实体 em this gt getDoctrine gt getManager user this gt get sec
  • Swift - 具有类型和协议的属性

    在我的 Objective C 类之一中 我有一个 type 属性UIViewController
  • 由于多部分无法加载文件:未找到边界

    我正在尝试从桌面上传图像 但未找到多部分边界的错误 如何设置图片上传的边界 这是我第一次上传图片 请大家多多指教 用户上传图片时的html事件监听器 document getElementById image file addEventLi
  • 通过 openshift 服务器在移动设备上出现 https 安全证书不受信任错误

    我正在 openshift 上启动一个应用程序 我从 namecheap 购买了 comodo Positive ssl 并按照说明在 openshift 上安装 它在桌面浏览器上运行良好 但在 Android 浏览器上出现以下 不可信 错
  • 在 Grails 中,命令“tomcat:deploy”不会像命令“dev war”那样生成完整的战争

    命令 grails dev war 完美部署在我的本地 Tomcat6 服务器中 生成了一个包含以下文件夹的战争 css images js META INF plugins WEB INF 不幸的是 我需要该命令tomcat 部署也有效
  • 如何仅迭代元组的第一个变量

    在Python中 当你有一个元组列表时 你可以迭代它们 例如 当你有 3d 点时 for x y z in points pass do something with x y or z 如果您只想使用第一个变量 或者第一个和第三个变量 该怎
  • case 表达式中是否可以使用不同的数据类型?

    我有这个查询 SELECT CASE WHEN dbo CFE PPHY P77 IS NOT NULL OR dbo CFE PPHY P77 lt gt THEN MONTH dbo CFE PPHY P77 WHEN dbo CFE
  • 直接使用GET和POST有哪些漏洞?

    我想知道有哪些漏洞而直接使用 GET 和 POST 变量 即没有修剪和addslashes函数和mysql转义字符串之类的东西 我的问题是 我们还需要照顾什么在使用 GET 和 POST 时 有哪些类型的攻击比如SQL注入 一般来说 不仅限
  • 将字符串转换为类对象[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我使用将类对象存储到字符串中toSt
  • 如何将一个巨大的文件分割成多个单词?

    如何从文本文件中读取很长的字符串 然后对其进行处理 拆分为单词 我尝试过StreamReader ReadLine 方法 但我得到了OutOfMemory例外 显然 我的队伍非常长 这是我的读取文件的代码 using var streamR
  • 日期范围内的日期范围

    实际上这个任务对我来说似乎很容易 但我有点卡住了 非常感谢一些提示 D 我有一些带有开始和结束时间的事件 我想创建一个包含日历周的表格 因此 我编写了一个方法来检查本周内是否有事件 并将其着色如下 private boolean inWee
  • 通过 f11 启用全屏后通过 javascript 禁用全屏

    通过按下面的按钮 我可以启用和禁用全屏模式 但按下 f12 后 我无法禁用全屏模式 我参考了其他答案 他们只提供了一种方法来检测窗口是否处于全屏模式 我是无法获取从全屏禁用全屏模式的代码 通过 f11 键制作 我尝试通过代码触发 f11 但
  • 以 PDF 形式通过电子邮件发送 Google 表格

    我有这个脚本 它通过电子邮件向我发送 Google 电子表格的 PDF 我只希望它通过电子邮件将第一个 选项卡 发送给我 如果可能的话 将其作为单个 PDF 或 zip 文件发送给我 想知道是否有人可以提供帮助 另外 其中一个 选项卡 是隐
  • 使用 Rcpp 将目标文件链接到函数的简化示例[重复]

    这个问题在这里已经有答案了 我现有的 C 代码由三个文件组成 头文件 h 文件 库文件 o 文件 和源文件 它们目前在 UNIX 下运行 并在 Matlab 中编译为 mex 文件 我想使用 Rcpp 将它们移植到 R 它们都又长又复杂 所
  • R中的随机森林对训练数据的大小有限制吗?

    我正在使用我的训练数据训练随机森林 该数据有 114954 行和 135 列 预测变量 我收到以下错误 model lt randomForest u b stars data traindata importance TRUE do tr
  • 可以通过 XML 定义 bean 构造型吗?

    是否可以通过 XML 定义 bean 构造型 如下
  • 在 pandas 中高效使用替换

    我正在寻找使用replace在 python3 中以有效的方式运行 我拥有的代码正在完成任务 但速度太慢 因为我正在处理大型数据集 因此 每当需要权衡时 我的首要任务是效率而不是优雅 这是我想做的一个玩具 import pandas as