Python 熊猫不会将分类数据[性别]更改为数值[0/1]
我正在尝试通过泰坦尼克号数据集工作。我想将Python 熊猫不会将分类数据[性别]更改为数值[0/1],python,pandas,machine-learning,categorical-data,kaggle,Python,Pandas,Machine Learning,Categorical Data,Kaggle,我正在尝试通过泰坦尼克号数据集工作。我想将Sex列转换为二进制值。这是我的尝试: sex = train_dataset['Sex'].replace([0,1],['female','male'],inplace=True) 当我试图打印(性)时,控制台输出无 我也曾尝试在SO上实施其他方法,但它们似乎都不起作用。以下是我的完整源代码: import pandas as pd from numpy import corrcoef train_dataset = pd.read_csv("h
Sex
列转换为二进制值。这是我的尝试:
sex = train_dataset['Sex'].replace([0,1],['female','male'],inplace=True)
当我试图打印(性)
时,控制台输出无
我也曾尝试在SO上实施其他方法,但它们似乎都不起作用。以下是我的完整源代码:
import pandas as pd
from numpy import corrcoef
train_dataset = pd.read_csv("https://raw.githubusercontent.com/oo92/Titanic-Kaggle/master/train.csv")
test_dataset = pd.read_csv("https://raw.githubusercontent.com/oo92/Titanic-Kaggle/master/test.csv")
survived = train_dataset['Survived']
pClass = train_dataset['Pclass']
#Doesn't work
sex = train_dataset['Sex'].replace([0,1],['female','male'],inplace=True)
age = train_dataset['Age']
fare = train_dataset['Fare']
parch = train_dataset['Parch']
sibSp = train_dataset['SibSp']
# print("Correlation between parent-children & survival is: " + str(corrcoef(survived, parch)))
# print("Correlation between age & survival is: " + str(corrcoef(survived, age)))
# print("Correlation between Siblings/Spouse & survival is: " + str(corrcoef(survived, sibSp)))
print(sex)
这里有两个问题,首先,您已经在
.replace(,)
中转换了参数。其次,您正在使用选项inplace=True
。这将更改train\u数据集
实例,而不是返回值
既然您知道在使用inplace=True
时不会返回任何值,您就会明白sex
应该等于None
,因为不会返回任何值:
>>> import pandas as pd
>>> df = pd.DataFrame({'a': ['male', 'female', 'female', 'male']})
>>> df
a
# 0 male
# 1 female
# 2 female
# 3 male
无replace=True
:
现在,当我们替换这些值时,我们将得到
>>> df.replace(['female', 'male'], [0,1])
# a
# 0 1
# 1 0
# 2 0
# 3 1
但是df
本身看起来仍然和以前完全一样:
>>> df
a
# 0 male
# 1 female
# 2 female
# 3 male
因此,为了替换df
中的值,我们将执行以下操作:
>>> df['a'] = df['a'].replace(['male', 'female'], [0,1])
>>> df
# a
# 0 0
# 1 1
# 2 1
# 3 0
使用replace=True
:
当您运行此命令时:df.replace(['female','male'],[0,1],inplace=True))
,您将立即得到一个操作版本的df
:
>>> df.replace(['female', 'male'], [0, 1], inplace=True)
>>> df
# a
# 0 0
# 1 1
# 2 1
# 3 0
请注意,inplace=True
参数使不返回任何值:
>>> test = df.replace(['female', 'male'], [0, 1], inplace=True)
>>> type(test)
# <class 'NoneType'>
>test=df.replace(['female','male'],[0,1],inplace=True)
>>>型式(试验)
#
试试:
看起来你的语法不正确。见
输出:
您可以使用
np.where
dataset['sex']=np.where(dataset['sex']=='female',0,1)
参数的官方文件: 就地:bool,如果为True,则默认为False,就地。注:这将 修改此对象上的任何其他视图(例如,来自 数据帧)。如果这是真的,则返回调用者 总之,
inplace=True
返回None
和inplace=False
返回执行操作的对象的副本
因此,在您的情况下,由于操作是inplace=True
,原始的序列对象train\u数据集['Sex']
。尝试打印train\u数据集
,操作完成后,您将看到修改后的数据帧
请参阅官方文档您正在使用选项
inplace=True
,这将更改train\u数据集
实例,而不是返回值。既然您知道使用inplace=True
时不会返回任何值,您就会明白sex
应该等于None
,因为不会返回任何值hanks@KenHBS就在Richard发布答案之前,我注意到了这一点。尽管如此,我还是感谢你的帮助。我对你的评论投了赞成票。如果你认为这是一个问得很好的问题,你也能给我一个投票吗?为什么你不检查数据集['sex']=='male'
?默认情况下,male被分配为1。你也可以这样做。其中(数据集['sex']='male',1,0)也应该工作并产生相同的输出。啊,好的。有道理。不幸的是,我已经接受了理查德的回答,但出于对你努力的感激,我还是投了你一票。如果你认为这是一个被问得很好的问题,你能给我一个投票吗?你也可以给这个一个机会(其实逻辑是一样的;)train\u dataset['Sex'].eq('male').astype(int)
@oo92
dataset['sex']=np.where(dataset['sex']=='female',0,1)