【发布时间】:2018-12-13 03:58:33
【问题描述】:
我尝试使用这样的映射将 Pandas 数据框的列转换为 int 值(假设给定的数据框:my_dataframe 和列:target_column):
targets = my_dataframe[target_column].unique()
map_to_int = {name: n for n, name in enumerate(targets)}
在 Pandas 中使用 Python 3.6 我想知道为什么
一)
my_dataframe['Integer-Column'] = map_to_int[my_dataframe[target_column]]
导致
TypeError: 'Series' 对象是可变的,因此它们不能被散列
同时
B)
my_dataframe['Integer-Column'] = my_dataframe[target_column].replace(map_to_int)
工作正常。
我想了解为什么会发生这种情况。是否有任何魔法可以替代没有抛出 TypeError 或者我错过了其他东西?我已经知道,dict-keys 是不允许改变的。但我仍然很难真正理解这一点,因为:
words = my_dataframe[target_column].unique()
# words = ['car' 'bike' 'plain']
foo = 'car'
map_to_int[foo] = 0
foo = 'bike'
map_to_int["bike"] = 1
任何帮助我理解为什么 B) 工作而没有 A) 麻烦的尝试将不胜感激。
【问题讨论】:
-
我在这里找到了一些关于字符串令人困惑的部分的解释:stackoverflow.com/questions/9097994/… foo 的示例映射显然有效,因为标签 foo 后面的字符串 'car' 或相应的 'bike' 是不可变的。即使标签 foo 可以指向各种“不可变目标”。
标签: python pandas dictionary dataframe typeerror