[PYTHON] Remarque) Conversion par lots de symboles spécifiques contenus dans une chaîne de caractères avec un dictionnaire

Aperçu

"Méthode de conversion par lots des caractères contenus dans les données" https://qiita.com/wellwell3176/questions/1345ab14964d2a050b5a

J'ai créé un programme basé sur les réponses aux questions ci-dessus. Je l'ai posté pour le fractionnement car il était trop long à mettre sur la page des questions.

spécification

Pour les données brutes du tableau 1, utilisez la table de conversion du tableau 2 pour séparer et convertir les symboles et les stocker dans une nouvelle colonne. Dans ces données, la table de conversion du tableau 2 est petite, mais dans les données réelles, il existe environ 30 types de symboles et environ 10 types d'étiquettes de colonne, donc Il y avait un désir de "compiler la table de conversion autant que possible avec un seul fichier Excel".

Tableau 1 Données brutes

No. Nom du cheval
1 Koshihikari ○ ③
2 Sasanishiki ◎
3 Yomogi Dango ✕ ②
4 Tanaka Katarou ①

Tableau 2 table de conversion

Attentes personnelles Prévisions de journaux
N ° 1
N ° 2
numéro 3
favori
Compteur
Grand trou

Programme mis en œuvre

Produit fini


import pandas as pd

#Détourner le programme généraliste présenté dans la question et la réponse
def tagging(df, column, trdict): #DataFrame d'origine,Colonnes utilisées pour la classification,Dictionnaire de classification
    for key, d in trdict.items():
    #Processus pour chaque 1ère clé (prévision personnelle, prévision journal) de la base de données.
        df_ = df[column].str.extract(f'({"|".join(d.keys())})')
        for k, v in d.items():
            df_ = df_.replace(k, v)
          #2nd key(◎ ✕ etc.)Après avoir extrait et créé une nouvelle colonne, convertissez la 2ème clé et la valeur
            df[column] = df[column].str.replace(k, "")
        df[key] = df_.fillna("")
        #Suppression de la deuxième clé de la colonne source
    return df

df = pd.DataFrame( #Créez des exemples de données. En fait, lire Excel
    data=[{
        'No.': 1,
        'horse': 'Koshihikari ○ ③',
    }, {
        'No.': 2,
        'horse': 'Sasanishiki ◎',
    }, {
        'No.': 3,
        'horse': 'Yomogi Dango ✕②',
    }, {
        'No.': 4,
        'horse': 'Tanaka Katarou ①',
    }])

dict_raw = pd.read_excel("hogehoge.xlsx",index_col=0)
#hogehoge.xlsx est égal aux données Excel du tableau 2
dict_process=dict_raw.to_dict(orient='dict')
#to_Convertir au format dictionnaire avec dict
list_key=list(dict_process.keys())
#Puisqu'il est utilisé dans l'instruction for, le contenu de la clé est répertorié (elle ne peut pas être sélectionnée comme cible de l'instruction for car elle n'a pas d'ordre si elle reste dans le dictionnaire).

dict_comp=dict() #update()Est utilisé, de sorte que le produit fini est d'abord généré sous forme de dictionnaire vide.

#Supprimez la clé sans valeur du dictionnaire (dans ce cas,"Attentes personnelles":"◎"Nan est stocké et dérange)
for i in list_key:
  output_dict = dict(filter(lambda item: item[1] is not np.nan, d3[i].items()))
  dict_comp.update({i:output_dict})

tagging(df,"horse",dict_comp)
<Résultat de sortie>
	No.prévisions du journal des prévisions personnelles du cheval
0 1 Koshihikari n ° 3 Opposition
1 2 Sasanishiki préféré
2 3 Grand trou Yomogi Dango n ° 2
3 4 Tanaka Katarou n ° 1

Lien de référence

Source de référence pour le filtrage du dictionnaire: https://tombomemo.com/python-dict-filter/

Recommended Posts

Remarque) Conversion par lots de symboles spécifiques contenus dans une chaîne de caractères avec un dictionnaire
Sortie d'une chaîne avec des sauts de ligne dans PyYAML
[Python] Ne laissez que les éléments commençant par une chaîne de caractères spécifique dans le tableau
Lorsqu'une chaîne de caractères d'une certaine série se trouve dans la clé du dictionnaire, la chaîne de caractères est convertie en valeur du dictionnaire.
[Golang] Vérifiez si une chaîne de caractères spécifique est incluse dans la chaîne de caractères
Conversion de la chaîne <-> date (date, datetime) en Python
Conversion de chaîne d'une liste contenant des nombres
<Python> Un quiz pour convertir par lots les noms de fichiers séparés par une chaîne de caractères spécifique dans le cadre du nom de fichier
Cloner avec une branche / balise spécifique dans GitPython
Extraire des lignes contenant une "chaîne" spécifique avec Pandas
Comment convertir / restaurer une chaîne avec [] en python
Obtenez le nom de la variable sous forme de chaîne de caractères.
Stocker le japonais (chaîne de caractères multi-octets) dans sqlite3 de python
[Python] Comment développer des variables dans une chaîne de caractères
#Une fonction qui renvoie le code de caractère d'une chaîne de caractères
Créez un lot d'images et gonflez avec ImageDataGenerator
Je veux diviser une chaîne de caractères avec hiragana
Calculer le produit des matrices avec une expression de caractère?
Arrêter une instance avec une balise spécifique dans Boto3
Notez ce que vous voulez faire à l'avenir avec Razpai
Obtenir la valeur d'une clé spécifique jusqu'à l'index spécifié de la liste de dictionnaires en Python
[Python] Programmation pour trouver le nombre de a dans une chaîne de caractères qui se répète un nombre spécifié de fois.
Comment compter rapidement la fréquence d'apparition des caractères à partir d'une chaîne de caractères en Python?
[Note] Un script shell qui vérifie l'utilisation du processeur d'un processus spécifique dans une boucle while.
Remarque sur le comportement par défaut de collate_fn dans PyTorch
Obtenez le nombre d'éléments spécifiques dans la liste python
Détecter les objets d'une couleur et d'une taille spécifiques avec Python
[Note] Importation de fichiers dans le répertoire parent en Python
Résumé du format de chaîne de caractères en Python3 Que ce soit pour vivre avec l'ancien modèle ou le nouveau modèle
L'histoire de la création d'un Bot qui affiche les membres actifs dans un canal spécifique de Slack avec Python