Python 使用包括dict lookup和#x27;系列';对象是可变的,因此不能对其进行散列
我知道有很多问题与我的问题相似,但在过去30分钟里,我浏览了几十条线索,却找不到问题的答案 我有一个包含数百列和行的数据框架,并使用函数中的大多数列返回一个应该添加到其他列的值 这个问题可以分解为以下几点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
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多个值,在我的整个程序中在许多不同的位置使用。因此,将函数调用替换为处处赋值。我不确定,但这可能比申请更快。