Python 使用包括dict lookup和#x27;系列';对象是可变的,因此不能对其进行散列

Python 使用包括dict lookup和#x27;系列';对象是可变的,因此不能对其进行散列,python,pandas,dictionary,mutable,Python,Pandas,Dictionary,Mutable,我知道有很多问题与我的问题相似,但在过去30分钟里,我浏览了几十条线索,却找不到问题的答案 我有一个包含数百列和行的数据框架,并使用函数中的大多数列返回一个应该添加到其他列的值 这个问题可以分解为以下几点 lookup = {"foo": 1, "bar": 0} def lookuptable(input_string, input_factor): return lookup[input_string] * input_factor myd

我知道有很多问题与我的问题相似,但在过去30分钟里,我浏览了几十条线索,却找不到问题的答案

我有一个包含数百列和行的数据框架,并使用函数中的大多数列返回一个应该添加到其他列的值

这个问题可以分解为以下几点

lookup = {"foo": 1, "bar": 0}

def lookuptable(input_string, input_factor):
    return lookup[input_string] * input_factor

mydata = pd.DataFrame([["foo", 4], ["bar",3]], columns = ["string","faktor"])
mydata["looked up value"] = lookuptable(mydata["string"], mydata["faktor"])
但这也带来了:

TypeError: 'Series' objects are mutable, thus they cannot be hashed
有没有一种方法可以避免这个问题,而不必重新构造功能本身


提前谢谢

函数接受两个参数,一个字符串和一个整数。 但是您为函数提供了2个系列。但是,您可以通过使用
.apply()
迭代数据帧并为函数提供参数(按行)


函数接受两个参数,一个字符串和一个整数。 但是您为函数提供了2个系列。但是,您可以通过使用
.apply()
迭代数据帧并为函数提供参数(按行)

试试这个:

lookup = {"foo": 1, "bar": 0}

def lookuptable(data):
    return lookup[data["string"]] * data["faktor"]

mydata = pd.DataFrame([["foo", 4], ["bar",3]], columns = ["string","faktor"])
mydata["looked up value"] = mydata.apply(lookuptable, axis=1)

print(mydata)

    string  faktor  looked up value
0   foo        4        4
1   bar        3        0

试试这个:

lookup = {"foo": 1, "bar": 0}

def lookuptable(data):
    return lookup[data["string"]] * data["faktor"]

mydata = pd.DataFrame([["foo", 4], ["bar",3]], columns = ["string","faktor"])
mydata["looked up value"] = mydata.apply(lookuptable, axis=1)

print(mydata)

    string  faktor  looked up value
0   foo        4        4
1   bar        3        0


除了使用
.apply()
,您还可以将列表理解与
.iterrows()


除了使用
.apply()
,您还可以将列表理解与
.iterrows()


您可以在没有函数的情况下执行此操作-

import pandas as pd
lookup = {"foo": 1, "bar": 0}
mydata = pd.DataFrame([["foo", 4], ["bar",3]], columns = ["string","factor"])
mydata["looked up value"] = mydata['string'].map(lookup) * mydata['factor']

您可以在没有函数的情况下执行此操作-

import pandas as pd
lookup = {"foo": 1, "bar": 0}
mydata = pd.DataFrame([["foo", 4], ["bar",3]], columns = ["string","factor"])
mydata["looked up value"] = mydata['string'].map(lookup) * mydata['factor']

这似乎是可行的,但我没有很多其他错误,所以我会接受你的答案,一旦我的代码是错误免费的。这似乎是可行的,但我没有很多其他错误,所以我会接受你的答案,一旦我的代码是错误免费的。谢谢你的effords。谢谢你的effords。谢谢你。这似乎与安德烈亚斯的提议非常相似。谢谢。这似乎与安德烈亚斯的提议非常相似。我知道。但正如所描述的那样。原始函数包含100多个值,在我的整个程序中在许多不同的位置使用。因此,将函数调用替换为处处赋值。我不确定,但这可能比申请更快。我知道。但正如所描述的那样。原始函数包含100多个值,在我的整个程序中在许多不同的位置使用。因此,将函数调用替换为处处赋值。我不确定,但这可能比申请更快。