J'essaie de travailler sur l'ensemble de données Titanic. Je souhaite convertir la colonne Sex
en valeurs binaires. Voici ma tentative:
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)
Et quand j'essaye de imprimer (sexe)
, la console affiche Aucun
!
J'ai également essayé de mettre en œuvre d'autres approches sur SO mais aucune d'elles ne semble fonctionner. Voici mon code source complet:
sex = train_dataset['Sex'].replace([0,1],['female','male'],inplace=True)
4 Réponses :
Il y a deux problèmes ici, premièrement, vous avez inversé les arguments dans .replace (
. Deuxièmement, vous utilisez l'option inplace = True
. Cela modifie l'instance train_dataset
, au lieu de renvoyer une valeur.
Maintenant que vous savez qu'aucune valeur n'est renvoyée lors de l'utilisation de inplace = True
, vous comprendrez que sex
doit être égal à None
, car rien n'est renvoyé:
>>> test = df.replace(['female', 'male'], [0, 1], inplace=True) >>> type(test) # <class 'NoneType'>
replace = True
: Maintenant, lorsque nous remplaçons les valeurs, nous obtenons
>>> df.replace(['female', 'male'], [0, 1], inplace=True) >>> df # a # 0 0 # 1 1 # 2 1 # 3 0
Mais df
lui-même a toujours exactement le même aspect que il l'a fait avant:
>>> df['a'] = df['a'].replace(['male', 'female'], [0,1]) >>> df # a # 0 0 # 1 1 # 2 1 # 3 0
Donc, pour remplacer la valeur dans df
, nous ferions:
>>> df a # 0 male # 1 female # 2 female # 3 male
Essayez :
sex = train_dataset['Sex'].replace(['female','male'],[0,1]) print(sex)
Il semble que votre syntaxe est désactivée. Voir le fonction de remplacement
Vous pouvez utiliser np.where
dataset['sex']=np.where(dataset['sex']=='female',0,1)
Pourquoi ne pas vérifier dataset ['sex'] == 'male'
?
le mâle reçoit un 1 par défaut. Vous pourriez aussi l'avoir de la manière np.where (dataset ['sex'] == 'male', 1,0) devrait également fonctionner et produire le même résultat.
Ah ok. Logique. Malheureusement, j'ai déjà accepté la réponse de Richard, mais je vous ai néanmoins voté pour vous remercier de vos efforts. Si vous pensez que c'était une question bien posée, pourriez-vous aussi me donner un vote favorable?
vous pouvez aussi essayer (même logique en fait;)) train_dataset ['Sex']. eq ('male'). astype (int)
@ oo92
Documentation officielle des paramètres:
inplace: bool, par défaut False Si True, en place. Remarque: ce sera modifier toutes les autres vues de cet objet (par exemple, une colonne d'un Trame de données). Renvoie l'appelant si c'est vrai.
Pour résumer, inplace = True
renvoie None
et inplace = False
renvoie une copie de l'objet avec l'opération effectuée.
Ainsi, dans votre cas, comme l'opération est inplace = True
, l'objet série d'origine train_dataset ['Sex']
est modifié. Essayez d'imprimer le train_dataset
après l'opération, vous devriez voir le dataframe modifié.
Reportez-vous à la documentation officielle ici < / a>
Vous utilisez l'option
inplace = True
, cela change l'instance detrain_dataset
, au lieu de renvoyer une valeur. Maintenant que vous savez qu'aucune valeur n'est retournée lors de l'utilisation deinplace = True
, vous comprendrez quesex
doit être égal àNone
, car rien n'est revenuMerci @KenHBS Je l'ai remarqué juste avant que Richard ne publie sa réponse. J'apprécie néanmoins votre aide. J'ai voté pour votre commentaire. Si vous pensez que c'était une question bien posée, pourriez-vous aussi me donner un vote favorable?