尝试映射具有重复值的系列时出现 InvalidIndexError

2024-04-04

我正在尝试将医院名称映射到其英国邮政编码。我有这些医院(在英国称为“Trusts”)的脊柱手术的 csv,该 csv 是 kate_spine.csv

我从中导入一列(信任)以简化操作。

import pandas as pd
spine = pd.read_csv('~/Dropbox/Work/NNAP/Spine/Kate_W/kate_spine2.csv', usecols = ['Trust'])

显示导入:

spine.head()


Trust
0   THE WALTON CENTRE NHS FOUNDATION TRUST
1   CAMBRIDGE UNIVERSITY HOSPITALS NHS FOUNDATION ...
2   KING'S COLLEGE HOSPITAL NHS FOUNDATION TRUST
3   LEEDS TEACHING HOSPITALS NHS TRUST
4   NT424

这些是信任名称并有一个索引。 我的邮政编码位于 csv all_all.csv 中。我将文件作为一列导入,也“信任”以简化。 下面表格的格式很差,但邮政编码在那里。

postcodes_all = pd.read_csv('all_all.csv', index_col = 'Trust')
postcodes_all.head()

    Unnamed: 0  postcode
Trust       
MANCHESTER UNIVERSITY NHS FOUNDATION TRUST  0   M13 9WL
SOUTH TYNESIDE AND SUNDERLAND NHS FOUNDATION TRUST  1   SR4 7TP
WORCESTERSHIRE HEALTH AND CARE NHS TRUST    2   WR5 1JR
SOLENT NHS TRUST    3   SO19 8BR
SHROPSHIRE COMMUNITY HEALTH NHS TRUST   4   SY3 8XL

我正在尝试使用地图从 14,000 个 csv 中获取大约 200 个代码。这是我的代码:

spine['Trust'].map(postcodes_all['postcode'])

和错误:

InvalidIndexError                         Traceback (most recent call last)
<ipython-input-6-25212fe14f16> in <module>
----> 1 spine['Trust'].map(postcodes_all['postcode'])

~/anaconda3/lib/python3.7/site-packages/pandas/core/series.py in map(self, arg, na_action)
   3826         dtype: object
   3827         """
-> 3828         new_values = super()._map_values(arg, na_action=na_action)
   3829         return self._constructor(new_values, index=self.index).__finalize__(self)
   3830 

~/anaconda3/lib/python3.7/site-packages/pandas/core/base.py in _map_values(self, mapper, na_action)
   1275                 values = self.values
   1276 
-> 1277             indexer = mapper.index.get_indexer(values)
   1278             new_values = algorithms.take_1d(mapper._values, indexer)
   1279 

~/anaconda3/lib/python3.7/site-packages/pandas/core/indexes/base.py in get_indexer(self, target, method, limit, tolerance)
   2983         if not self.is_unique:
   2984             raise InvalidIndexError(
-> 2985                 "Reindexing only valid with uniquely" " valued Index objects"
   2986             )
   2987 

InvalidIndexError: Reindexing only valid with uniquely valued Index objects

Trust 列中的脊柱文件确实包含重复值,因为每行描述了 Trust 内各个医生的手术活动,并且该系列中最多有 10 名医生(因此有 10 个重复的 Trust 名称)。我想在提取唯一的信任名称后尝试此操作。理想情况下,我希望能够对其重复的系列进行此操作。


Trust 列中的脊柱文件确实包含重复值,因为每行描述了 Trust 内各个医生的手术活动,并且该系列中最多有 10 名医生(因此有 10 个重复的 Trust 名称)。

这就是问题所在。当索引重复时,pandas 不知道使用哪个值。请参阅下面的示例。

import pandas as pd

s = pd.Series(['cat', 'dog', 'rabbit', 'cat'])
s
## Out
0       cat
1       dog
2    rabbit
3       cat
dtype: object
s2 = pd.Series(['carnivore', 'omnivore', 'herbivore', 'carnivore'])
# Set the value of `s` as the index of `s2`, since map looks at the Series index.
s2.index = s
s2
## Out
cat       carnivore
dog        omnivore
rabbit    herbivore
cat       carnivore
dtype: object

由于有两次出现cat在索引中s2,pandas 不知道映射时使用哪个值s2 to s(您可以说动物与猫的进食行为存在一对二的映射)。因此,现在尝试使用地图会抛出InvalidIndexError

s.map(s2)
## Out
---------------------------------------------------------------------------

InvalidIndexError                         Traceback (most recent call last)

<ipython-input-43-1950a0742767> in <module>()
----> 1 s.map(s2)


~/miniconda3/envs/ds/lib/python3.7/site-packages/pandas/core/series.py in map(self, arg, na_action)
   3826         dtype: object
   3827         """
-> 3828         new_values = super()._map_values(arg, na_action=na_action)
   3829         return self._constructor(new_values, index=self.index).__finalize__(self)
   3830 


~/miniconda3/envs/ds/lib/python3.7/site-packages/pandas/core/base.py in _map_values(self, mapper, na_action)
   1275                 values = self.values
   1276 
-> 1277             indexer = mapper.index.get_indexer(values)
   1278             new_values = algorithms.take_1d(mapper._values, indexer)
   1279 


~/miniconda3/envs/ds/lib/python3.7/site-packages/pandas/core/indexes/base.py in get_indexer(self, target, method, limit, tolerance)
   2983         if not self.is_unique:
   2984             raise InvalidIndexError(
-> 2985                 "Reindexing only valid with uniquely" " valued Index objects"
   2986             )
   2987 


InvalidIndexError: Reindexing only valid with uniquely valued Index objects

您需要检查重复值并决定使用哪一个。你可以这样做:

s2[s2.index.duplicated(keep=False)]
## Out
cat    carnivore
cat    carnivore
dtype: object

在这种情况下,两个值cat是相同的,我们可以摆脱其中任何一个(您的描述表明在您的情况下是相同的)。如果它们不同,您就必须选择保留哪一个。

# `~` negates/inverses the indexing
s2 = s2[~s2.index.duplicated()]
s2
## Out
cat       carnivore
dog        omnivore
rabbit    herbivore
dtype: object

s2现在有了动物与进食行为的一对一映射,我们可以安全地映射s2 onto s.

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

尝试映射具有重复值的系列时出现 InvalidIndexError 的相关文章

随机推荐

  • 单元测试作为构建的一部分

    我有一个 CMake 项目 分为三个部分 我的库的编译 编译许多单元测试程序来测试这些库的每个精确子部分 使用这些库编译程序示例 My question is about the 2nd part My unit tests executa
  • 如何使用 django-filters 重命名(在 API 中公开)过滤器字段名称?

    正如问题所述 我正在尝试重命名 API 中公开的过滤器字段名称 我有以下型号 class Championship Model class Group Model championship ForeignKey Championship c
  • qwt 图表示例 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 大家好 我正在使用 qwt 我是新手 我想使用 qwt 和 qt 创建者绘制图表 我不知道要在我的 qt 项目中包含哪些库来绘制图表 我已
  • 在 Python 中下载、解压并读取 gzip 文件

    我想在 Python 中下载 提取和迭代文本文件 而无需创建临时文件 基本上 这个管道 但是在 python 中 curl ftp ftp theseed org genomes SEED SEED fasta gz gunzip proc
  • Array.prototype.filter.call(forms, function(form) 这是做什么的?

    我很难完全理解这段代码是如何工作的 这只是表单验证代码复制并从引导程序粘贴 我的问题从这一行开始 var 验证 Array prototype filter call forms function form 在我看来 它正在创建一个名为va
  • 如果启用身份验证,Azure 上的查询/标头太大

    我有一个在本地运行良好的节点 快速应用程序 我已将其上传到 Azure Web App 只要我不启用身份验证 它就可以正常工作 当我启用 AAD 身份验证时 应用程序失败并显示状态 500 1011 错误请求 我的网址中有很多查询参数 如果
  • 在 Git 中:为什么经常提交是件好事? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 所以我对 Git 和 DVCS 总体来说还很陌生 而且我一直在到处读到 至少在私有分支上 一直提交总是好的 问题是 为什么 我正在使用 Sour
  • 纯Python四叉树实现

    All 有一些使用 Python 实现四叉树的示例 但我的问题是 有谁知道用纯 python 编写的类 在单个 py 文件中 我可以轻松地将其包含在我的项目中 这里列出了三个最受欢迎的软件包这些四叉树库中的任何一个都好吗 https sta
  • Silverlight:如何处理标准程序集

    一个常见的 Silverlight 任务 减小 xap 文件的大小 有很多热门手册解释了如何使应用程序模块化 但我没有找到任何人解释如何制作 模块化 标准库 我的 xap 文件的最大部分 1 7Mb 当整体大小为 1 8Mb 时 被标准程序
  • 访问 Scala 中可用但 PySpark 中不可用的依赖项

    我正在尝试访问 RDD 的依赖项 在 Scala 中 这是一个非常简单的代码 scala gt val myRdd sc parallelize 0 to 9 groupBy 2 myRdd org apache spark rdd RDD
  • Java 执行器无法对任务进行排队

    我需要一个 Java 执行器 如果正在处理其他任务 它会拒绝任务 我想不可能操纵工作队列大小 有人可能会奇怪 为什么我首先需要一个具有这种特征的执行者 我需要能够轻松更改策略并允许非零队列大小 有任何想法吗 Use a 线程池执行器 htt
  • 对 href 使用 JavaScript 单引号和双引号

    我在转义单引号和双引号时遇到问题hrefJavaScript 函数 我里面有这段 JavaScript 代码href 就像是 a href a fileName doc true gt click this 现在 由于双引号内的双引号无效
  • 如何在 Sails.js 策略中使用错误处理程序回调?

    问完后这个问题 https stackoverflow com questions 22160043 how to use a callback array as the handler for a sails js route 我发现我可
  • lubuntu 的洞察调试器有其他选择吗?

    你能告诉我是否有其他选择洞察力 调试器或者如何使用调试器运行和调试 Jeff Duntemann 的 汇编语言分步第三版 中的汇编代码 其中输出 与书中示例中描述的输出相同吗 我在汇编计划学习方面完全是菜鸟 所以有人向我推荐了这本书 但是我
  • 使用 Vee-Validate 和 vue js 2 在提交时验证子输入组件

    我目前正在尝试创建一个包含多个 输入字段 组件的注册表单 这些组件都需要在按下 提交 后进行验证 目前 当其中的文本发生更改时 它们都会自行验证 但我发现很难对所有输入字段进行全局调用以验证所有输入字段 我想要实现的目标如下 http ve
  • .Net Mvc 3 触发器(提交按钮除外)非侵入式验证

    我想要什么 我想通过我选择的事件在我的视图中触发客户端验证 它可能是 onblur 也可能是另一个按钮 但不是提交按钮 相关链接 如何在不使用提交按钮的情况下触发验证 https stackoverflow com questions 57
  • 删除字符串中不需要的字符

    我想问如何从字符串中删除特殊字符 从废弃页面中提取 4 30am 我只是想获得时间 所以我尝试使用以下方法过滤它 str 4 30am new string preg replace A Za z0 9 str echo pre new s
  • 使用 pandas 读取带有 numpy 数组的 csv

    我有一个csv包含 3 列的文件emotion pixels Usage包含由 组成35000行例如0 70 23 45 178 455 Training I used pandas read csv阅读csv文件为pd read csv
  • XPath 元素包含 2 个子元素,每个子元素都与特定文本匹配

    我正在使用 Selenium 来定位页面上的某些元素 我有一张看起来像这样的桌子 table tbody tr td Text1 td td Text2 td tr tbody table Each 元素与此模式匹配 我想传入两个字符串 t
  • 尝试映射具有重复值的系列时出现 InvalidIndexError

    我正在尝试将医院名称映射到其英国邮政编码 我有这些医院 在英国称为 Trusts 的脊柱手术的 csv 该 csv 是 kate spine csv 我从中导入一列 信任 以简化操作 import pandas as pd spine pd