Extraction d'éléments non numériques avec des pandas.DataFrame

Cet article provient du laboratoire Furukawa Advent_calendar Jour 18.

Cet article a été rédigé par un étudiant du Furukawa Lab dans le cadre de ses études. Le contenu peut être ambigu ou l'expression peut être légèrement différente.

introduction

Quand j'étais en prétraitement avec des pandas, je me sentais mal à l'aise parce que des éléments autres que des valeurs numériques étaient mélangés dans les données, je vais donc le résumer sous forme d'article. En outre, le code de cet article utilise le notebook jupyter.

Données à traiter

kaggle's 2,2k + Scotch Whisky Reviews Dataset

Description des données

Il s'agit d'un ensemble de données évaluées par les critiques sur le whisky écossais. Le nombre de données est de 2247 et le nombre d'éléments est de 7.

Confirmation des données

#Importation de bibliothèque
import pandas as pd
import numpy as np
#Lire le fichier csv
data = pd.read_csv('scotch_review.csv')
#Affichage des données
data.head()

Sujet principal

Vérifier si les données à traiter contiennent des éléments de types autres que des valeurs numériques

Cette fois, nous n'utiliserons que les éléments "view.point" et "price". Regardons le type de données de chaque colonne

#Confirmation de type
data[['review.point','price']].dtypes

kata.jpg

Il semble que des éléments autres que des valeurs numériques soient mélangés dans la colonne 'view.point'. ** Le code suivant peut être utilisé pour déterminer s'il y a des éléments non numériques dans la colonne correspondante. (* Le numéro de type Str renvoie True) **

#'price', 'review.point'Si la colonne contient des éléments qui ne peuvent pas être convertis en type numérique'False'rends le.
data[['review.point', 'price']].apply(lambda s:pd.to_numeric(s, errors='coerce')).notnull().all()

kata.jpg

Extraction et conversion d'éléments avec des types autres que des nombres

À partir de là, nous allons extraire des éléments avec des types autres que des nombres de la colonne «prix» et les remplacer. Le premier est l'extraction.

#Extraction d'éléments de type non numérique
pic = data[['price']][data['price'].apply(lambda s:pd.to_numeric(s, errors='coerce')).isnull()]
pic

!

Ici, les données de / set et / litre sont traitées comme des valeurs manquantes, et les autres sont converties en type numérique.

# ','Effacer,'/'Remplacez l'élément contenant
change_data = pic['price'].str.replace(',','').mask(pic['price'].str.contains('/'), np.nan) 
change_data

str_data.jpg

Reflétez les changements dans les données d'origine.

#Faites une copie des données d'origine et remplacez la pièce correspondante
data_c = data.copy()
data_c.loc[pic.index,'price'] = change_data

Enfin, convertissez le nombre de la colonne "Prix" en un type numérique et supprimez la ligne contenant la valeur manquante.

data_c['price'] = pd.to_numeric(data_c['price'], errors = 'ignore')
df  = data_c.dropna()

À la fin

Cette fois, j'ai extrait et remplacé des éléments autres que des valeurs numériques par pandas.DataFrame. Dans le prochain article, je vais visualiser cet ensemble de données prétraitées Whisky Reviews.

appendice

Voici une description de la fonction que j'utilisais dans mon code.

Déterminer s'il y a des éléments qui ne peuvent pas être convertis en type numérique

#'price', 'review.point'Si la colonne contient des éléments qui ne peuvent pas être convertis en type numérique'False'rends le.
data[['review.point', 'price']].apply(lambda s:pd.to_numeric(s, errors='coerce')).notnull().all()
nom de la fonction def(argument):
expression de retour

--DataFrame.apply (fonction, axe = 0) --Passez l'élément DataFrame comme argument de fonction. Sélectionnez la méthode de passage (direction de ligne ou direction de colonne) avec axe.

Remplacement partiel de la chaîne de caractères de chaque élément et remplacement de la valeur elle-même

# ','Effacer,'/'Remplacez l'élément contenant
change_data = pic['price'].str.replace(',','').mask(pic['price'].str.contains('/'), np.nan) 
change_data

--Series.str.replace ('Chaîne A', 'Chaîne B') --Convertir la chaîne A '' contenue dans chaque élément de la série en chaîne B '' --Series.str.contains ('chaîne A') --Retourne les éléments contenant la chaîne de caractères A comme True et les autres éléments comme False. --Series.mask (arg, 'valeur') --Remplacez l'élément True de arg (Series) par une "valeur" et ne modifiez pas l'élément "Faux".

Recommended Posts

Extraction d'éléments non numériques avec des pandas.DataFrame
Extraire plusieurs éléments avec le tableau Numpy
Extraire EXIF avec des gorgées
Extraire des éléments autres qu'un index spécifique avec Numpy
Extraire les données Twitter avec CSV
Extraire des nombres avec des expressions régulières
Extraire les éléments du tableau et les index dans l'ordre décroissant avec numpy
Extraire la valeur de crête avec scipy
Extraire le fichier xz avec python
Extraire la valeur maximale avec les pandas.
[Automation] Extraire les rendez-vous Outlook avec Python
[Débutant] Extraire des chaînes de caractères avec Python
Extraire plusieurs colonnes spécifiques avec des pandas