Python 无法将列值转换为二进制值

Python 无法将列值转换为二进制值,python,pandas,Python,Pandas,在这张普查数据表中,我试图将列Income的值替换为1或0。对于>50K,我尝试将列Income的值替换为1;对于,我尝试将int替换为0。您尝试将int放入具有字符串且类型为object的单元格中。那不行。列不能同时具有int64和对象类型。OneHotEncoder是机器学习的标准,但它有不同的输出 生成虚拟变量列的一种方法: train['Gender'] = train.Gender.map({'Male': 1,'Female': 0}) 另一种方式: train['Gender']

在这张普查数据表中,我试图将列Income的值替换为1或0。对于>50K,我尝试将列Income的值替换为1;对于,我尝试将int替换为0。您尝试将int放入具有字符串且类型为object的单元格中。那不行。列不能同时具有int64和对象类型。OneHotEncoder是机器学习的标准,但它有不同的输出

生成虚拟变量列的一种方法:

train['Gender'] = train.Gender.map({'Male': 1,'Female': 0})
另一种方式:

train['Gender'] = train['Gender'].str.contains('Male').astype(int)

train['Gender'].str.contains'Male'构成一列True和False。astypeint将布尔值转换为1和0。

嗨,大卫,谢谢你的解释,你的代码确实有效!但是我没有得到答案,我的道歉没有说清楚,实际上我有两个功能,一个是对性别值进行二值化,一个是对收入值进行二值化,一个是对性别值进行二值化的功能,而收入代码没有,但是它们的行非常相似,不知道有什么区别吗?我已经在我原来的帖子中添加了这两个代码,谢谢!一个热编码器会更好。我添加了另一种可能有效的方法。请投票选出答案。确保先清洁这些列。
import pandas as pd
import numpy as np
from sklearn import preprocessing, metrics
from sklearn.model_selection import train_test_split


train=pd.read_csv('census-training.csv')
train = train.replace('?', np.nan)

for column in train.columns:
    train[column].fillna(train[column].mode()[0], inplace=True)
#########*********************
####*******my original codes to binarize the gender values:
def gender_to_numeric(x):
    #TODO return 1 f gender is Male, 0 otherwise
    gender = {'Male': 1,'Female': 0} 
    x.Gender = [gender[item] for item in x.Gender]
gender_to_numeric(train) ###this works, no error

def income_to_numeric(x):
    income = {'>50K.': 1,'<=50K.': 0} 
    x.Income = [income[item] for item in x.Income]

income_to_numeric(train) ##this will have the error below
train['Gender'] = train.Gender.map({'Male': 1,'Female': 0})
train['Gender'] = train['Gender'].str.contains('Male').astype(int)