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 quesexdoit ê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?