0
votes

Recherche de colonne dans Pandas

Comment recherchez-vous si une valeur existe sous une ligne spécifique?

Exemple J'ai ce fichier qui contient les éléments suivants: xxx

L'utilisateur entrera 1 et il sera xxx

mais si l'entrée de l'utilisateur 4, il ajoutera une nouvelle ligne contenant 4 et xxx

et mettra à jour le fichier comme celui-ci xxx


3 commentaires

Les identifiants sont index? Lors de la mise à jour de l'ID donné, que devriez-vous être fait dans d'autres colonnes du Dataframe?


df ['Nom de colonne']. ISI ([ID ']). TOUT () doit indiquer si "ID" est dans la colonne ou non (la sortie sera true ou faux ). Si true , ne faites rien, sinon crée une nouvelle ligne avec l'entrée de l'utilisateur.


Veuillez fournir un exemple minimal de vos données et quel résultat vous attendez. Il n'est pas clair de votre question exactement ce que vous essayez d'accomplir.


3 Réponses :


1
votes

df.loc ['id'] code> retournera la ligne contenant l'ID dans l'index du Dataframe. En supposant que les identifiants sont les valeurs d'index du DF que vous parlez de.

Si vous avez une liste d'identifiants et souhaitez les rechercher tous ensemble, alors: p>

supposant: P>

'searchedID' in df.ids.values 


0 commentaires

2
votes

Une approche facile sera: xxx

N'oubliez pas d'ajouter le paramètre ignore_index à éviter TypeError. J'ai ajouté une valeur Bool pour éviter d'ajouter une ligne plusieurs fois.


16 commentaires

Dans la série New_row, ajoutez simplement un autre élément comme: NEW_ROW = PD.SERIES ([ID, NOM]). Cela devrait fonctionner. ID est l'identifiant d'entrée de l'utilisateur et du nom est à nouveau le nom saisi par l'utilisateur.


im obtenir une syntaxe invalide dans le "si df.iloc [i] ['id'] = INPUT_STR:" Ligne


essayez si str (df.iloc [i] ['id']) == str (INPUT_STR). Juste pour clarifier, INPUT_STR est l'entrée ID de l'utilisateur.


Obtenu cette erreur TypeError: APPEND () a eu un mot clé inattendu argument 'ignore_text'


Je suis désolé. C'est 'ignore_index'. Essayez maintenant et ça devrait marcher !! Faites-moi savoir s'il y a encore une erreur.


BTW pour la nouvelle entrée Devrais-je modifier new_row = PD.Series ([INPUT_STR]) vers NEW_ROW = PD.SERIES ([ID] [NOM])?


Non, il devrait être 1 liste comme: new_row = pd.series ([ID, nom])


parce que je reçois cette erreur "TypeError: Les indices de liste doivent être des entiers ou des tranches, pas str"


Obtenu il n'y avait déjà aucune erreur, sauf que lorsque j'ai imprimé le fichier, il n'a pas annoncé la nouvelle ligne


j'ai aussi essayé d'ajouter df.to_csv ('file.csv', index = false) il n'a toujours pas ajouté


J'ai édité ma réponse. Fondamentalement, nous n'avons pas enregistré la mise à jour de la trame de données. Nous devons faire df = df.operation ()


Comment tu fais ça? Devrais-je mettre df = df.operation () dans la dernière ligne?


Vérifiez ma réponse modifiée. Cela devrait fonctionner correctement. Si ça veut, veuillez upvote ma réponse !!


J'ai compris! Je vous remercie beaucoup pour votre aide


Salut désolé pour la peine. Hier, c'était déjà actifk ce qui s'est passé, mais à chaque fois que j'entraîne l'identifiant existant dans le fichier qu'il exécute si bool_val == True


S'il vous plaît vérifier la modification. Ajout d'une déclaration de pause et modifier le bool_value sur FALSE si ID trouvée fait le travail. Faites marquer ma réponse comme acceptée si cela fonctionne pour vous !!



2
votes
df.loc[searchid]={'ID': str(searchid), 'Name': str(name)}

5 commentaires

ValueError: impossible de définir une ligne avec des colonnes incompatibles


Ce qui précède supposait que la colonne ID que vous avez spécifiée est indexée. Df.id.values ​​in si instruction et df.loc [SearchID] = [Searchid, nom] dans la déclaration d'autre si ID n'est pas index. Utilisez également STR (SearchID) basé sur le type de données de la colonne ID dans [STR (SearchID), Nom]]


@Sinclair vérifier la réponse modifiée selon le commentaire précédent


df.loc [SearchId] = {'id': str (Searchid), "nom": str (nom)}


Les trois versions fonctionnent parfaitement à ma fin. J'aurais pu suggérer d'ajouter dans la déclaration d'autre pour obtenir une réponse acceptée, mais ce n'est pas ce que je vois aussi optimal à ma fin ...