0
votes

`in` comportement dans pandas.dataframe.Assign ()

Considérez la structure de données de chaîne simple: xxx xxx

alors, on veut créer une colonne t en vérifiant une sous-chaîne "T "Dans cordes colonne. xxx

On peut voir le résultat: xxx

le La question est de savoir pourquoi on peut voir le mauvais T à l'observation avec index 1 .

upd:

aucune solution supplémentaire nécessaire .


6 commentaires

...quelle est la question?


La question est "pourquoi la mauvaise valeur de df dans la colonne t de l'observation 1 ?"


Parce que 't' dans df ["chaînes"] renvoie false, vous vérifiez pour voir si une chaîne fait partie de PD.Series. Ce n'est pas une comparaison valide. Vous devez utiliser la compréhension de la liste ou l'accesseur de chaîne pour obtenir des valeurs à partir des PD. Series.


Mais T = Lambda OBS: OBS.Strings + "ABC" fonctionne comme OBS.Strings a un type de chaîne.


Non. Faites cela à la place, DF.Assign (T = Lambda X: Type (x [Strings '])) Regardez vos types. Vous, voir x ['Strings'] est une PD.Series.


Vous avez raison! La valeur de la variable obs a de type type et obs.string.to_string () affiche toutes les valeurs de la colonne entière.


3 Réponses :


4
votes

Utilisez le suivi, avec l'accesseur de chaîne en pandas et contient: xxx

sortie: xxx

utilisant df.Assign xxx

sortie: xxx

à l'aide de la compréhension de la liste avec 'in' xxx p> sortie: xxx


2 commentaires

C'est une excellente approche, mais que diriez-vous de assigner () méthode? La question concerne l'objet de Dataframe, mais pas des objets de la série.


Je l'aime! Pouvez-vous ajouter une approche avec Lambda et dans ?



3
votes

Pour utiliser une Lambda et vérifier si "T" existe dans les chaînes simplement:

df.assign(t = lambda x: x['strings'].str.contains('t'))


2 commentaires

Aimer! La méthode appliquer () fonctionne. La question concerne assigner () un.


@Ruben Kazumov vérifie mon édition. Une chose à noter: vous pouvez confondre le 'T' devant la Lambda (déclaration en tant que colonne) et le 'T'); minimiser la confusion avec le nom de colonne approprié :-) J'espère que cela aide



1
votes

Si vous voulez que le ASSIGNEZ CODE>, AVIS Lambda à affecter ne vérifiera pas chaque cellule, elle vérifie toujours la colonne basée sur la colonne, c'est pourquoi il affiche FAUX pour tous

df.assign(t = df.strings.apply(lambda x : 't' in x))
  strings      t
0     qwe  False
1     rty   True
2     uio  False


0 commentaires