从大字典中替换 DataFrame 中的值的更好方法

2024-01-04

我编写了一些代码,使用字典将 DataFrame 中的值替换为另一个帧中的值,并且它正在工作,但我在一些大文件上使用它,其中字典可能会变得很长。几千双。当我使用这段代码时,它运行速度非常慢,而且在某些地方还出现了内存不足的情况。

我有些确信我的方法远非最佳,并且必须有一些更快的方法来做到这一点。我创建了一个简单的示例来执行我​​想要的操作,但是对于大量数据来说速度很慢。希望有人有更简单的方法来做到这一点。

import pandas as pd

#Frame with data where I want to replace the 'id' with the name from df2
df1 = pd.DataFrame({'id' : [1, 2, 3, 4, 5, 3, 5, 9], 'values' : [12, 32, 42,    51, 23, 14, 111, 134]})

#Frame containing names linked to ids
df2 = pd.DataFrame({'id' : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 'name' : ['id1',   'id2', 'id3', 'id4', 'id5', 'id6', 'id7', 'id8', 'id9', 'id10']})

#My current "slow" way of doing this.

#Starts by creating a dictionary from df2
#Need to create dictionaries from the domain and banners tables to link ids
df2_dict = dict(zip(df2['id'], df2['name']))

#and then uses the dict to replace the ids with name in df1
df1.replace({'id' : df2_dict}, inplace=True)

我想你可以使用map http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.map.html with Series转换的to_dict http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.to_dict.html - get NaN如果不存在值df2:

df1['id'] = df1.id.map(df2.set_index('id')['name'].to_dict())
print (df1)
    id  values
0  id1      12
1  id2      32
2  id3      42
3  id4      51
4  id5      23
5  id3      14
6  id5     111
7  id9     134

Or replace http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.replace.html,如果不存在值df2让原始值来自df1:

df1['id'] = df1.id.replace(df2.set_index('id')['name'])
print (df1)
    id  values
0  id1      12
1  id2      32
2  id3      42
3  id4      51
4  id5      23
5  id3      14
6  id5     111
7  id9     134

Sample:

#Frame with data where I want to replace the 'id' with the name from df2
df1 = pd.DataFrame({'id' : [1, 2, 3, 4, 5, 3, 5, 9], 'values' : [12, 32, 42,    51, 23, 14, 111, 134]})
print (df1)
#Frame containing names linked to ids
df2 = pd.DataFrame({'id' : [1, 2, 3, 4, 6, 7, 8, 9, 10], 'name' : ['id1',   'id2', 'id3', 'id4', 'id6', 'id7', 'id8', 'id9', 'id10']})
print (df2)

df1['new_map'] = df1.id.map(df2.set_index('id')['name'].to_dict())
df1['new_replace'] = df1.id.replace(df2.set_index('id')['name'])
print (df1)
   id  values new_map new_replace
0   1      12     id1         id1
1   2      32     id2         id2
2   3      42     id3         id3
3   4      51     id4         id4
4   5      23     NaN           5
5   3      14     id3         id3
6   5     111     NaN           5
7   9     134     id9         id9
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从大字典中替换 DataFrame 中的值的更好方法 的相关文章

随机推荐

  • 如何使用 scala.js 读取文本文件?

    基本上我想弄清楚我需要传递什么onload method def selectedFile e ReactEventI val reader new dom FileReader reader readAsText e currentTar
  • 其他端口上的 file_get_contents

    我必须通过 80 联系位于不同端口上的服务 但函数 file get contents 返回错误 无法打开流 连接被拒绝 url http nexusdigital agency 81 API result file get content
  • 具有引脚配对功能的 Android BLE 外设

    我正在开发一个 Android 应用程序 它充当具有服务的蓝牙外围设备角色 当我开始投放广告时 搜索提供此服务的设备的其他 Android 设备可以看到我的设备 并且无需 PIN 码即可与其配对 好的 但如何启用 PIN 配对呢 当使用特定
  • Android 上的 NoClassDefFoundError

    我不知道我做错了什么 我想在我的 Android 项目中创建一个路径变量 但每次我都会收到 NoClassDefFoundError test test turns This is a simple String List
  • 未调用复制构造函数,但编译器抱怨没有

    给出以下代码 include
  • 无法在 Windows 10 上构建 Docker 映像

    Windows 10 专业版 1909泊坞窗 2 2 0 4 43472 Dockerfile 的开头是这样的 FROM debian stable 20191118 这是唯一有效的部分 或任何其他类似的Linux ubuntu 18 04
  • Javascript 中带有多个括号的闭包

    任何人都可以解释一下 当传递更多的括号参数时 该函数如何发出警报 我无法清楚地理解它 function sum a var sum a function f b sum b return f f toString function retu
  • ASP.NET 4.5 异步等待和 Response.Redirect

    有什么办法可以重定向Page Load 或任何其他 ASP NET 事件 使用时async await 当然Redirect throws ThreadAbortException但即使我抓住它try catch它最终会出现一个错误页面 如
  • Hadoop - 全局排序平均值以及 MapReduce 中何时发生

    我在用Hadoop 流 JAR for 字数 我想知道我怎样才能得到全局排序 根据SO中另一个问题的回答 我发现当我们使用只需一台减速机我们可以得到全局排序 但在我的结果中numReduceTasks 1 一个减速器 它不是排序的 例如 我
  • 核心数据关系可以有属性吗

    我正在将 MySQL 数据库移植到 Mac OS 应用程序的 Core Data 我的数据库中有两个多对多表 除了包含外键之外 还有一些数据列 是否可以向核心数据中的多对多关系添加属性 对我来说看起来不像 我的后备方法是复制核心数据中的链接
  • 选择每组中具有最大值的行

    在每个主题都有多个观察值的数据集中 对于每个主题 我想选择具有最大值 pt 的行 例如 使用以下数据集 ID lt c 1 1 1 2 2 2 2 3 3 Value lt c 2 3 5 2 5 8 17 3 5 Event lt c 1
  • 当变量调用别名时如何调用别名

    我添加了一个别名 alias anyalias echo kallel 如果我执行 anyalias kallel 它执行echo命令没有任何问题 现在 如果我以这种方式定义一个变量 var anyalias 然后用这样的方式执行 var
  • 是否有更简单的方法使用 ActiveAdmin 创建/选择相关数据?

    假设我有以下模型 class Translation lt ActiveRecord Base has many localizations end class Localization lt ActiveRecord Base belon
  • 访问 Linkedin 私人可播放流的权限 - 500 或 403 错误

    我在使用 Linked In API V2 时遇到了下一个问题 curl X GET header Accet application json header Authorization Bearer
  • 获取iframe的内容

    我正在尝试获取的内容从另一页 另一个页面是另一个网站 我登录了该网站 获取其内容并将其存储在 我如何获取其中的内容进入当前窗口 简短的回答 你做不到 浏览器使用以下限制限制来自不同网站的内容之间的交互同源政策 http en wikiped
  • 如何在flutter中为image.asset添加onClick?

    我在单击时使用了三个图像 这些图像将导航到其他页面 那么我应该如何在这些图像上使用 onClick 我的代码如下 Row children Expanded child Column children
  • 将 spin.js 微调器插入 div 中?

    刚刚发现 spin js 它似乎是一个救星 问题是如何将微调器插入到我的 div 中 我有一个关注按钮 单击该按钮时 我会删除背景图像并当前替换为 loader gif 我怎样才能用 spin js 做同样的事情 我举了一个 jsfiddl
  • ::-ms-thumb 出现在 MS Edge 中的轨道后面

    我创建了一个滑块 In chrome everything is working fine See image below But in MS Edge thumb appears behind track See image below
  • 无法销毁 codeigniter 中的会话

    我想要实现的是一个简单的登录页面 如果用户登录成功 则重定向到主页 否则保留登录页面 我有 1 个名为login 和 1 个型号名为main 当用户单击登录按钮时 将调用login login send
  • 从大字典中替换 DataFrame 中的值的更好方法

    我编写了一些代码 使用字典将 DataFrame 中的值替换为另一个帧中的值 并且它正在工作 但我在一些大文件上使用它 其中字典可能会变得很长 几千双 当我使用这段代码时 它运行速度非常慢 而且在某些地方还出现了内存不足的情况 我有些确信我