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.
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.
kaggle's 2,2k + Scotch Whisky Reviews Dataset
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.
#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()
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
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()
À 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
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()
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.
Voici une description de la fonction que j'utilisais dans mon code.
#'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.
# ','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