【问题标题】:Python adding values from multiple columns to a set()Python将多列中的值添加到集合()
【发布时间】:2017-08-31 23:42:23
【问题描述】:

我无法将 10 列中的多个值合并为一个 set。我想使用一个集合,因为每一列都有重复的值,我希望得到一个所有值(医疗代码)的列表,而不在列表中重复它们中的任何一个。我能够从第一列中进行初始设置,但是当我尝试添加其他列时,我得到一个“不可散列的类型错误”。

这是我的代码:

data_sorted = data.fillna(0).sort_values(['PAT_ID', 'VISIT_NO'])
set_ICD1 = set(data_sorted['ICD_1'].unique())
print(len(set_ICD1))
set_ICD = set_ICD1.add(data_sorted['ICD_2'])

print(len(set_ICD))

这是我得到的错误:

11586 # (not part of the error this is the length of the initial set)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-7-e3966ec54661> in <module>()
  1 set_ICD1 = set(data_sorted['ICD_1'].unique())
  2 print(len(set_ICD1))
----> 3 set_ICD = set_ICD1.add(data_sorted['ICD_2'].unique())
  4 
  5 print(len(set_ICD))

TypeError: unhashable type: 'numpy.ndarray'

任何解决此问题的建议或提示将不胜感激!

【问题讨论】:

  • 错误正是它的意思。数组不可散列,它们也是可变的,这排除了散列。您需要另一个容器,如果您想从容器中添加项目,请使用 update()
  • 发生这种情况是因为您试图将整个列添加为 numpy.ndarray。尝试遍历该数组,并单独添加元素

标签: python pandas numpy set unique


【解决方案1】:

如果您想一次向set 添加多个元素,您需要使用update 方法而不是add

set_ICD1.update(data_sorted['ICD_2'])

如果它是一个 NumPy 数组,您可能应该使用 ravel()(如果它是 n 维的 - 这会使它变平)和 tolist()(用于性能):

set_ICD1.update(data_sorted['ICD_2'].ravel().tolist())

【讨论】:

  • 感谢您的帮助!当我尝试使用 print(len(set_ICD)) TypeError Traceback (most recent call last) &lt;ipython-input-12-5cfdc9801acb&gt; in &lt;module&gt;() ----&gt; 1 print(len(set_ICD)) TypeError: object of type 'NoneType' has no len() 打印新集合的长度时出现此错误
  • 我的错误。现已修复。
猜你喜欢
  • 1970-01-01
  • 2019-02-08
  • 1970-01-01
  • 2011-03-24
  • 2014-08-22
  • 2020-08-07
  • 2013-07-31
  • 1970-01-01
  • 2020-09-04
相关资源
最近更新 更多