[PYTHON] Comment savoir s'il y a une valeur dans "quelque part" de pandas DataFrame

Vue d'ensemble (TL; DR)

J'ai reçu une demande pour extraire une ligne contenant un certain caractère en csv de 50 colonnes x 3 millions de lignes, donc je ne pouvais pas l'ouvrir dans Excel, alors je l'ai essayé avec Pandas.

Mise en garde

*** grep *** Si vous l'utilisez, ne dites jamais ... C'est juste une pratique des pandas.

Exemple de données

Il est difficile d'écrire en csv de 50 colonnes x 3 millions de lignes, voici donc des exemples de données. (Les données réelles sont NaN, donc c'était un peu plus compliqué.)

df = pd.DataFrame({"NAME":["Alice","Bob","Charly","Eve","Frank"],
                   "AGE":[10,20,30,20,10],
                  "ADDRESS":["TOKYO","OSAKA","TOKYO","OSAKA","AICHI"],
                  "COMPANY_PLACE":["TOKYO","TOKYO","AICHI","OSAKA","OSAKA"],
                  "BIRTH_PLACE":["TOKYO","OSAKA","TOKYO","OSAKA","OSAKA"]
                  })
df.head()

スクリーンショット 2020-03-27 23.17.58.png

Stratégie A: créer une colonne qui combine toutes les colonnes

Pourquoi ne pas combiner toutes les colonnes et faire une recherche de correspondance partielle pour cette colonne!

df["P"] = df['ADDRESS'].str.cat(df['COMPANY_PLACE'], sep='-').str.cat(df['BIRTH_PLACE'], sep='-')
df

スクリーンショット 2020-03-27 23.20.40.png

df[df["P"].str.contains("OSAKA")]
スクリーンショット 2020-03-27 23.23.07.png

L'exemple a 5 colonnes, mais les données réelles ont 50 colonnes. C'est un peu pour les ajouter tous ...

Stratégie B: imaginons la connexion des colonnes


df = df.drop("P",axis=1)
df["P"] = [""] * len(df)
for column in df.columns.values:
    if column != "P":
        df["P"] = df["P"].str.cat(df[column].astype(str), sep='-')
df[df["P"].str.contains("OSAKA")]

Puisqu'il existe un risque que les chaînes de caractères et les nombres soient mélangés, il est important d'utiliser astype (str) lors du classement.

スクリーンショット 2020-03-28 0.18.40.png

Stratégie C: Rechercher dans chaque colonne et résumer les résultats.

df["P"] = [False] * len(df)
for column in df.columns.values:
    df["P"] = df["P"] | df[column].astype(str).str.contains("OSAKA")
df[df["P"]]
スクリーンショット 2020-03-28 0.10.06.png

Conclusion

Après tout, grep + awk est le plus puissant. C'était un bon entraînement, mais je me sentais noyé dans le plan ...

Recommended Posts

Comment savoir s'il y a une valeur dans "quelque part" de pandas DataFrame
Comment trouver l'adresse mémoire de la valeur de la trame de données Pandas
Comment vérifier si une valeur existe dans un type d'énumération
Comment obtenir un aperçu de vos données dans Pandas
Comment réattribuer un index dans pandas dataframe
Y a-t-il NaN dans le DataFrame pandas?
Comment savoir quel type de fichier est stocké dans S3 en Python
python: Astuces pour afficher un tableau (liste) avec un index (comment savoir quel numéro est un élément d'un tableau)
Comment vérifier en Python si l'un des éléments d'une liste est dans une autre liste
Comment trouver le nombre optimal de clusters pour les k-moyennes
[Pandas] Si les données de la première ligne sont dans l'en-tête de DataFrame
[Python] Comment écrire une instruction if en une phrase.
Comment vérifier si le contenu du dictionnaire est le même en Python par valeur de hachage
Découvrez combien de chaque caractère est dans la chaîne.
Dans le dictionnaire python, si une clé inexistante est accédée, initialisez-la avec une valeur arbitraire
J'ai essayé de savoir dans quelle langue ce logiciel dont je m'occupe toujours est écrit
Comment connaître la structure interne d'un objet en Python
J'ai essayé de savoir si ReDoS est possible avec Python
Que faire si «Sans nom: 0» est ajouté dans to_csv-> read_csv des pandas
Je vais vous expliquer comment utiliser Pandas d'une manière facile à comprendre.
Comment écrire sobrement avec des pandas
Que faire s'il y a un décimal dans python json .dumps
Comment changer plusieurs colonnes de csv dans Pandas (Unixtime-> Japan Time)
Comment obtenir un nom de colonne et un nom d'index spécifiques avec Pandas DataFrame
Comment connaître le nombre de processeurs sans utiliser la commande sar
Comment comparer si le contenu des objets dans scipy.sparse.csr_matrix est le même
Comment trouver une colonne d'un type spécifique (str, float, etc.) à partir d'une colonne dans un DataFrame
Je souhaite laisser une commande arbitraire dans l'historique des commandes de Shell
Dans les pandas python SettingWithCopyWarning Une valeur tente d'être définie sur une copie d'une tranche d'un DataFrame. Essayez d'utiliser .loc [row_indexer, col_indexer] = value à la place
[Python] Résumé de l'utilisation des pandas
[Pandas] Qu'est-ce que set_option [Comment utiliser]
Comment obtenir le "nom" d'un champ dont la valeur est limitée par l'attribut choice dans le modèle Django
Comment lire des fichiers CSV avec Pandas
Comment utiliser is et == en Python
Découvrez comment diviser uniformément un fichier avec un certain nombre de lignes
Comment trouver le coefficient de la courbe approximative passant par les sommets en Python
Comment trouver la zone du diagramme de Boronoi
Comment suivre le travail avec Powershell
Résumé de la façon d'importer des fichiers dans Python 3
Comment obtenir de l'aide dans un shell interactif
Supprimer les lignes avec des valeurs arbitraires dans pandas DataFrame
Résumé de l'utilisation de MNIST avec Python
Découvrez la fraction de la valeur saisie en python
Comment stocker une fonction Python dans la valeur d'un dictionnaire (dict) et appeler la fonction en fonction de la clé
Comment vérifier s'il est dans le type de dictionnaire (Dictionary, Hash) en utilisant tout ou partie
Que faire si la barre de progression n'est pas affichée dans tqdm de python
J'ai utilisé Python pour découvrir les choix de rôle des 51 "Yachts" dans le monde.
Comment savoir quel processus utilise le port localhost et l'arrêter