我试图在Pandas的数据栏中对一个绝对的“收入”列进行二值化。
对于本专栏,有四个记录值:‘'>50k',’'>50k.',<=50k.‘,'<=50k’
目前我的职责是..。
def income_to_numeric(x):
for val in x:
if val == '>50k.' or val == '>50k':
val = 1
else:
val = 0
return x
train['Income'] = income_to_numeric(train['Income'])很明显,这个函数和实现不起作用,但是有人能解释一下为什么不能工作吗?我确信这与对函数如何工作或变量是如何分配的产生了根本性的误解,但这并不是简单地点击我的代码。我确实意识到这不是一个有效的实施。
发布于 2020-11-15 23:13:49
for循环实际上将x值的副本分配给变量val,这意味着更改val根本不会更改原始值。而且,在迭代数组时修改值代替数组是不健康的。
一个可能的解决方案是创建一个新数组,然后用所需的值填充它,如下所示:
def income_to_numeric(x):
new_x = []
for val in x:
if val == '>50k.' or val == '>50k':
new_x.append(1)
else:
new_x.append(0)
return new_x但是,如果您的数据文件相当大,您可能希望做一些更有效的事情。一种选择是:
binarization = {
'>50k.': 1,
'>50k': 1,
'<=50k.': 0,
'<=50k': 0,
}
train['New_Income'] = train['Income'].map(binarization)如果这对你有用,或者你还有其他问题,请告诉我们。
https://stackoverflow.com/questions/64850668
复制相似问题