CSV
CSV est un fichier dans lequel les valeurs sont séparées par des virgules. Il est couramment utilisé car il est très facile à manipuler dans l'analyse des données.
Pour lire un fichier csv avec Pandas, utilisez la fonction read_csv ().
read_csv("Chemin du fichier où se trouve le fichier csv", header=)
Comme la loi de l'en-tête
Si l'option d'en-tête est omise, la première ligne du fichier lu sera le nom de la colonne.
Si header = None est spécifié, Pandas attribuera un nom de colonne approprié.
Si vous spécifiez un numéro de ligne tel que header = 1, les données de la deuxième ligne du fichier lu seront utilisées comme nom de colonne. La lecture commence à partir de la ligne qui suit.
Puisque le numéro de ligne commence à 0, le numéro de ligne de la première ligne de données sera 0.
Par exemple, lisez un ensemble de données wine qui ne contient pas d'informations sur le nom de colonne du répertoire. Puisque nous ne savons pas ce que la valeur numérique représente telle quelle, ajoutez un nom de colonne (colonne) qui indique le contenu de la valeur.
import pandas as pd
df = pd.read_csv("./4050_data_cleansing_data/wine.csv", header=None)
#Ajoutez une colonne pour voir ce que chaque nombre représente
df.columns = ["", "Alcohol", "Malic acid", "Ash", "Alcalinity of ash", "Magnesium","Total phenols", "Flavanoids", "Nonflavanoid phenols", "Proanthocyanins","Color intensity", "Hue", "OD280/OD315 of diluted wines", "Proline"]
df
Le ./ dans le chemin du fichier indique le répertoire actuel. Le répertoire actuel est le répertoire de travail dans lequel Python est actuellement en cours d'exécution.
Créez un fichier de données CSV à l'aide de la bibliothèque CSV fournie en standard avec Python 3.
Produit les données de la ville, de l'année et de la saison des 10 derniers Jeux olympiques sous forme de fichier de données CSV.
import csv
#Utilisez l'instruction with
# csv0.Mode d'écriture avec le fichier csv comme variable csvfile ("w") Ouvrir
with open("./4050_data_cleansing_data/csv0.csv", "w") as csvfile:
#En tant qu'arguments de la méthode writer, la variable csvfile et le code de saut de ligne (\n)
writer = csv.writer(csvfile, lineterminator="\n")
#Ajouter une ligne à l'aide de writerow (list)
writer.writerow(["city", "year", "season"])
writer.writerow(["Nagano", 1998, "winter"])
writer.writerow(["Sydney", 2000, "summer"])
writer.writerow(["Salt Lake City", 2002, "winter"])
writer.writerow(["Athens", 2004, "summer"])
writer.writerow(["Torino", 2006, "winter"])
writer.writerow(["Beijing", 2008, "summer"])
writer.writerow(["Vancouver", 2010, "winter"])
writer.writerow(["London", 2012, "summer"])
writer.writerow(["Sochi", 2014, "winter"])
writer.writerow(["Rio de Janeiro", 2016, "summer"])
#production
# csv0.Mode lecture avec fichier csv comme variable csvfile("r")Ouvrir avec
with open("./4050_data_cleansing_data/csv0.csv", "r") as csvfile:
print(csvfile.read())
Une fois exécuté, un fichier de données CSV appelé csv0.csv sera créé et le contenu des données sera affiché. Pour savoir où le fichier de données CSV a été créé
import os #Faire
print(os.getcwd()) #Éxécuter.
Sans utiliser la bibliothèque CSV Vous pouvez également créer des données CSV à l'aide de Pandas. Il est plus pratique d'utiliser Pandas lors de la conversion de données au format PandasDataFrame en données CSV.
Pour créer un fichier csv avec Pandas, utilisez la fonction to_csv ().
to_csv("Nom du fichier csv à créer")
À titre d'exemple de DataFrame, comme dans l'échantillon précédent, les données de la ville, de l'année et de la saison des 10 derniers Jeux olympiques sont sorties sous forme de fichier de données CSV.
import pandas as pd
data = {"city": ["Nagano", "Sydney", "Salt Lake City", "Athens", "Torino", "Beijing", "Vancouver", "London", "Sochi", "Rio de Janeiro"],
"year": [1998, 2000, 2002, 2004, 2006, 2008, 2010, 2012, 2014, 2016],
"season": ["winter", "summer", "winter", "summer", "winter", "summer", "winter", "summer", "winter", "summer"]}
df = pd.DataFrame(data)
df.to_csv("4050_data_cleansing_data/csv1.csv")
#Faire cela csv1.Un fichier appelé csv nettoie_Il sera créé dans le répertoire de données.
S'il y a un blanc dans les données lues, il sera reconnu comme une valeur manquante NaN (pas un nombre). Pour supprimer les valeurs manquantes NaN pour améliorer la précision des données
dropna()Utilisez une fonction.
#Tout d'abord, créez au hasard une table avec une partie de la table manquante exprès.
import numpy as np
from numpy import nan as NA
import pandas as pd
sample_data_frame = pd.DataFrame(np.random.rand(10, 4))
#Certaines données sont intentionnellement perdues
sample_data_frame.iloc[1, 0] = NA
sample_data_frame.iloc[2, 2] = NA
sample_data_frame.iloc[5:, 3] = NA
sample_data_frame
Pour effacer la ligne ou la colonne entière (ligne contenant NaN) avec perte de données C'est ce qu'on appelle la suppression par liste.
dropna()Utiliser une fonction
Supprimez toutes les lignes contenant au moins un NaN. Aussi Si axis = 1 est spécifié dans l'argument, même une colonne contenant NaN sera supprimée.
sample_data_frame.dropna()
Si la méthode par liste supprime toutes les lignes manquantes et qu'il y a trop peu de données Une autre option consiste à n'utiliser que les données disponibles. Laisser les colonnes avec quelques défauts (par exemple, les colonnes 0 et 1) La suppression de lignes contenant NaN à partir de là est appelée suppression par paires.
sample_data_frame[[0, 1]].dropna()
Autre que la suppression des valeurs manquantes pour améliorer l'exactitude des données Vous pouvez également affecter des données alternatives aux valeurs manquantes.
Pour remplacer (remplacer) des données alternatives par la valeur manquante NaN
fillna()Utilisez une fonction.
Créez au hasard une table avec une partie de la table manquante exprès.
import numpy as np
from numpy import nan as NA
import pandas as pd
sample_data_frame = pd.DataFrame(np.random.rand(10, 4))
#Certaines données sont intentionnellement perdues
sample_data_frame.iloc[1, 0] = NA
sample_data_frame.iloc[2, 2] = NA
sample_data_frame.iloc[5:, 3] = NA
# fillna()Lors de l'utilisation d'une fonction, le nombre donné en argument est affecté à la partie NaN. Cette fois, je vais le remplir avec 0.
sample_data_frame.fillna(0)
#Si vous spécifiez ffill pour la méthode, vous pouvez le remplir avec la valeur de la ligne précédente.
sample_data_frame.fillna(method="ffill")
La méthode de remplissage des valeurs manquantes avec la valeur moyenne de la colonne (ou de la ligne) est appelée méthode de substitution de valeur moyenne.
La valeur moyenne est moyenne()Calculez à l'aide d'une fonction.
import numpy as np
from numpy import nan as NA
import pandas as pd
sample_data_frame = pd.DataFrame(np.random.rand(10, 4))
#Certaines données sont intentionnellement perdues
sample_data_frame.iloc[1, 0] = NA
sample_data_frame.iloc[2, 2] = NA
sample_data_frame.iloc[5:, 3] = NA
#Remplacez la valeur moyenne de la colonne par la pièce NaN en utilisant fillna
sample_data_frame.fillna(sample_data_frame.mean())
Les statistiques peuvent être divisées en valeurs représentatives et en degrés de dispersion. Une valeur représentative est une valeur qui représente les caractéristiques de base des données. Par exemple, valeur moyenne, valeur maximale, valeur minimale, etc.
import pandas as pd
df = pd.read_csv("./4050_data_cleansing_data/wine.csv", header=None)
df.columns=["", "Alcohol", "Malic acid", "Ash", "Alcalinity of ash", "Magnesium","Total phenols", "Flavanoids", "Nonflavanoid phenols", "Proanthocyanins","Color intensity", "Hue", "OD280/OD315 of diluted wines", "Proline"]
# DataFrame `df`clé de"Alcohol"Calculez la valeur moyenne de
df["Alcohol"].mean()
#Résultat de sortie
13.000617977528091
S'il y a un double des données, supprimez les données pour améliorer l'exactitude des données. Préparez un DataFrame contenant des données en double Essayez d'extraire ou de supprimer les données en double.
import pandas as pd
from pandas import DataFrame
dupli_data = DataFrame({"col1":[1, 1, 2, 3, 4, 4, 6, 6]
,"col2":["a", "b", "b", "b", "c", "c", "b", "b"]})
dupli_data
duplicated()Avec la méthode
Génère des données de type Series qui renvoie True pour les lignes dupliquées et extrait les données dupliquées.
#Extraire les données en double
dupli_data.duplicated()
#Résultat de sortie
0 False
1 False
2 False
3 False
4 False
5 True
6 False
7 True
dtype: bool
dtype signifie "Type de données" et indique le type de données de l'élément.
drop_duplicates()Utilisez la méthode pour supprimer les données en double.
dupli_data.drop_duplicates()
Qu'est-ce que le mappage? Pour les données qui ont une clé commune Il s'agit du processus de référencement de la valeur correspondant à la clé d'une autre table. En fait, préparez un DataFrame et essayez le processus de mappage.
import pandas as pd
from pandas import DataFrame
attri_data1 = {"ID": ["100", "101", "102", "103", "104", "106", "108", "110", "111", "113"]
,"city": ["Tokyo", "Osaka", "Kyoto", "Hokkaido", "Tokyo", "Tokyo", "Osaka", "Kyoto", "Hokkaido", "Tokyo"]
,"birth_year" :[1990, 1989, 1992, 1997, 1982, 1991, 1988, 1990, 1995, 1981]
,"name" :["Hiroshi", "Akiko", "Yuki", "Satoru", "Steeve", "Mituru", "Aoi", "Tarou", "Suguru", "Mitsuo"]}
attri_data_frame1 = DataFrame(attri_data1)
attri_data_frame1
Créez des données de type dictionnaire avec le nom de zone correspondant à la ville.
city_map ={"Tokyo":"Kanto"
,"Hokkaido":"Hokkaido"
,"Osaka":"Kansai"
,"Kyoto":"Kansai"}
city_map
En utilisant la colonne city de attri_data_frame1 préparée au début comme clé, reportez-vous aux données de nom de zone correspondantes de city_map et ajoutez-les à la nouvelle colonne. C'est le processus de cartographie. Si vous êtes familier avec Excel, imaginez un processus comme la fonction vlookup. Effectuez un traitement de mappage à l'aide de la fonction map () et ajoutez une région à attri_data_frame1 en tant que nouvelle colonne.
attri_data_frame1["region"] = attri_data_frame1["city"].map(city_map)
attri_data_frame1
Si vous regardez la sortie, vous pouvez voir que le nom de la région a été ajouté à la colonne de région. Les éléments dont les données correspondantes n'existent pas dans city_map sont remplis avec NaN.
La division des bacs est le processus de division grossière des données numériques en catégories. Par exemple, il s'agit d'un processus pour diviser l'âge en 0-9 ans, 10-19 ans, 20-29 ans. Préparez à l'avance une liste divisée par casiers
pandas coupés()Processus à l'aide d'une fonction.
import pandas as pd
from pandas import DataFrame
attri_data1 = {"ID": [100,101,102,103,104,106,108,110,111,113]
,"city": ["Tokyo", "Osaka", "Kyoto", "Hokkaido", "Tokyo", "Tokyo", "Osaka", "Kyoto", "Hokkaido", "Tokyo"]
,"birth_year" :[1990, 1989, 1992, 1997, 1982, 1991, 1988, 1990, 1995, 1981]
,"name" :["Hiroshi", "Akiko", "Yuki", "Satoru", "Steeve", "Mituru", "Aoi", "Tarou", "Suguru", "Mitsuo"]}
attri_data_frame1 = DataFrame(attri_data1)
Spécifiez la granularité de la division dans une liste et effectuez une division de casier. Ici, nous nous concentrons sur la naissance_année.
#Créer une liste de granularité fractionnée
birth_year_bins = [1980,1985,1990,1995,2000]
#Faites un fractionnement de la poubelle
birth_year_cut_data = pd.cut(attri_data_frame1.birth_year,birth_year_bins)
birth_year_cut_data
#Résultat de sortie
0 (1985, 1990]
1 (1985, 1990]
2 (1990, 1995]
3 (1995, 2000]
4 (1980, 1985]
5 (1990, 1995]
6 (1985, 1990]
7 (1985, 1990]
8 (1990, 1995]
9 (1980, 1985]
Name: birth_year, dtype: category
Categories (4, interval[int64]): [(1980, 1985] < (1985, 1990] < (1990, 1995] < (1995, 2000]]
"()" N'inclut pas cette valeur, et "[]" signifie que c'est le cas. Par exemple, (1985, 1990] n'inclut pas 1985, mais comprend 1990.
Si vous voulez compter le nombre de chaque bac
value_counts()Utilisez la méthode.
pd.value_counts(birth_year_cut_data)
#Résultat de sortie
(1985, 1990] 4
(1990, 1995] 3
(1980, 1985] 2
(1995, 2000] 1
Name: birth_year, dtype: int64
Vous pouvez également donner un nom à chaque bac.
group_names = ["first1980", "second1980", "first1990", "second1990"]
birth_year_cut_data = pd.cut(attri_data_frame1.birth_year,birth_year_bins,labels = group_names)
pd.value_counts(birth_year_cut_data)
#Résultat de sortie
second1980 4
first1990 3
first1980 2
second1990 1
Name: birth_year, dtype: int64
Il est également possible de spécifier le nombre de divisions à l'avance et de diviser. Vous pouvez l'utiliser pour créer des bacs à peu près de la même taille. Spécifiez le nombre de divisions dans le deuxième argument de la fonction cut ().
pd.cut(attri_data_frame1.birth_year,2)
#Résultat de sortie
0 (1989.0, 1997.0]
1 (1980.984, 1989.0]
2 (1989.0, 1997.0]
3 (1989.0, 1997.0]
4 (1980.984, 1989.0]
5 (1989.0, 1997.0]
6 (1980.984, 1989.0]
7 (1989.0, 1997.0]
8 (1989.0, 1997.0]
9 (1980.984, 1989.0]
Name: birth_year, dtype: category
Categories (2, interval[float64]): [(1980.984, 1989.0] < (1989.0, 1997.0]]
Recommended Posts