[PYTHON] Une introduction aux Pandas pour apprendre tout en souffrant [Partie 1]

introduction

Pandas est une bibliothèque incontournable pour l'analyse de données en Python. Cependant, ce Pandas a un obstacle très élevé pour les débutants ... J'ai également eu beaucoup de problèmes, alors je vais essayer de le remonter à partir de l'essentiel. Je ne suis pas un Pandas avancé moi-même, alors j'apprécierais vos commentaires et vos conseils. De plus, cet article sera composé de trois parties. (Parce que c'est prévu, il y a une grande possibilité que ça change ...)

Commençons (* ^ ▽ ^ *)

Remarques

Veuillez noter que l'importation des bibliothèques suivantes sera omise dans les futures notations.

import pandas as pd
import numpy as np

À propos de la série

Il existe deux types principaux de classe Pandas, Series et DataFrame. Pour expliquer brièvement la différence, Series peut gérer des données unidimensionnelles (vecteur) et DataFrame peut gérer des données bidimensionnelles (matrice). Vérifions d'abord la série. pandas.Series

Créer une série (spécifier le dictionnaire)

sr = pd.Series({'taro': 'kyoto', 'jiro': 'osaka', 'saburo': 'nara'})
print(sr.head())

img123.png

Dans le code ci-dessus, le nom d'attribut du dictionnaire correspond à l'étiquette de ligne (index) de Series, et la valeur du dictionnaire correspond à la valeur de Series.

Créer une série (spécifier la matrice)

sr = pd.Series(['kyoto', 'osaka', 'nara'], index=['taro', 'jiro','saburo'] )
print(sr.head())

img123.png

Vous pouvez définir l'étiquette de ligne (index) comme ci-dessus. Au fait, si vous ne définissez pas le libellé de la ligne, aucune erreur ne se produira, mais si vous ne le définissez pas explicitement, le nombre 0,1 sera défini automatiquement.

La série a encore de nombreuses fonctionnalités, mais nous les omettreons car il existe de nombreux doublons avec le DataFrame. ** Cependant, veuillez noter que DataFrame et Series sont utilisés différemment même s'ils ont le même nom d'attribut. ** ** (Je pense que c'est aussi l'un des facteurs qui rendent les pandas difficiles ...)

À propos de DataFrame

En parlant de Pandas, c'est DataFrame. Jetons un œil à la référence officielle de DataFrame. pandas.DataFrame

Les trois suivants sont des arguments importants pour le constructeur de pandas.DataFrame.

Jetons un coup d'œil au programme actuel.

Création de DataFrame (colonne)

Le premier est le cas de la création de Datarfame à l'aide de données de colonne. Le nom d'attribut du dictionnaire est utilisé comme étiquette de colonne et la valeur (enregistrée sous forme de tableau) est traitée comme ligne (index). (* Une erreur se produira si les valeurs ne sont pas organisées dans un tableau) ↑ Apparemment, si vous définissez correctement l'index, vous n'obtiendrez pas d'erreur même s'il ne s'agit pas d'un tableau. (C'est compliqué ...)

data = {
  'name': ['taro', 'jiro', 'saburo'],
  'address': ['kyoto', 'osaka', 'nara'],
  'birth': ['2020-01-01T12:00:00', '2020-02-11T12:00:00', '2020-03-22T12:00:00']
}
df = pd.DataFrame(data = data)
print(df.head())

img123.png

Création de DataFrame (ligne)

Ensuite, créez un Dataframe à l'aide des données de ligne. Aucune erreur ne se produira sans colonnes, mais dans ce cas, les colonnes seront automatiquement étiquetées avec des nombres tels que 0,1.

data = [
  ['taro', 'kyoto', '2020-01-01T12:00:00'],
  ['jiro', 'osaka', '2020-02-11T12:00:00'],
  ['saburo', 'nara', '2020-03-22T12:00:00']
]
df = pd.DataFrame(data = data, columns = ['name', 'address', 'birth'])
print(df.head())

img123.png

À propos, si vous souhaitez définir à la fois l'étiquette de ligne (index) et l'étiquette de colonne (colonnes), procédez comme suit. Définissez à la fois l'index et les colonnes.

data = [
  ['taro', 'kyoto', '2020-01-01T12:00:00'],
  ['jiro', 'osaka', '2020-02-11T12:00:00'],
  ['saburo', 'nara', '2020-03-22T12:00:00']
]
df = pd.DataFrame(data = data, index = ['a', 'b', 'c'], columns = ['name', 'address', 'birth'])
print(df.head())

img123.png

Extraction de colonnes à partir de DataFrame

Je pense qu'il existe de nombreuses possibilités d'extraire des données de colonne spécifiques à partir des données. Dans ce cas, il est plus flexible d'utiliser loc, qui sera décrit plus loin, mais il est également possible de réduire les colonnes en le spécifiant directement dans le Dataframe. ** Vous n'avez pas besoin de vous souvenir de cette méthode au début car loc, qui sera décrite plus tard, est plus sophistiquée (c'est déroutant) **

data = [
  ['taro', 'kyoto', '2020-01-01T12:00:00'],
  ['jiro', 'osaka', '2020-02-11T12:00:00'],
  ['saburo', 'nara', '2020-03-22T12:00:00']
]
df = pd.DataFrame(data = data, columns = ['name', 'address', 'birth'])
print(df['name'])

img123.png

Le code ci-dessus extrait la colonne "nom". Vous remarquerez que l'affichage en forme de tableau a changé. En effet, le résultat de l'extraction des colonnes est Series et non Dataframe.

Si vous souhaitez extraire plusieurs colonnes, procédez comme suit.

df[['name', 'address']]

img123.png

Si vous extrayez plusieurs colonnes, le résultat extrait sera un Dataframe au lieu d'une série.

Extraction de lignes de Dataframe

Les lignes peuvent être extraites ainsi que les colonnes. Utilisez des tranches pour extraire. ** Vous n'avez pas besoin de vous souvenir de cette méthode au début car loc, qui sera décrite plus tard, est plus sophistiquée (c'est déroutant) **

data = [
  ['taro', 'kyoto', '2020-01-01T12:00:00'],
  ['jiro', 'osaka', '2020-02-11T12:00:00'],
  ['saburo', 'nara', '2020-03-22T12:00:00']
]
df = pd.DataFrame(data = data, index = ['a', 'b', 'c'], columns = ['name', 'address', 'birth'])
print(df['a':'b'])

img123.png

Dans ce qui précède, la ligne "a" et la ligne "b" sont extraites. ** Contrairement aux colonnes, plusieurs lignes ne peuvent pas être sélectionnées et extraites individuellement. ** ** (Par exemple, vous ne pouvez pas extraire les lignes a et c) De plus, si vous souhaitez sélectionner uniquement la ligne a, vous devez la spécifier en tranches. (Par exemple, print (df ['a': 'a']) ne peut extraire que la ligne a)

À propos des attributs Dataframe

Dataframe possède les attributs suivants.

Tous sont importants, alors regardons-les un par un.

Dataframe.T [Obtenir une matrice transposée]

T peut obtenir la matrice transposée. En termes simples, vous pouvez obtenir des données avec des lignes et des colonnes permutées.

data = [
  ['taro', 'kyoto', '2020-01-01T12:00:00'],
  ['jiro', 'osaka', '2020-02-11T12:00:00'],
  ['saburo', 'nara', '2020-03-22T12:00:00']
]
df = pd.DataFrame(data = data, index = ['a', 'b', 'c'], columns = ['name', 'address', 'birth'])
print(df.T)

img123.png

Datarfame.at & Dataframe.iat [Extraction d'une seule valeur]

En utilisant at et iat, vous pouvez obtenir la valeur de n'importe quelle position dans ** Dataframe. ** ** ** Pour dataframe at et iat, deux arguments sont toujours requis **. (Pour limiter la position à un) La différence entre at et iat est que at spécifie la position par étiquette de ligne et étiquette de colonne, tandis que iat spécifie par numéro de ligne et numéro de colonne.

data = [
  ['taro', 'kyoto', '2020-01-01T12:00:00'],
  ['jiro', 'osaka', '2020-02-11T12:00:00'],
  ['saburo', 'nara', '2020-03-22T12:00:00']
]
df = pd.DataFrame(data = data, index = ['a', 'b', 'c'], columns = ['name', 'address', 'birth'])
print(df.at['a','address']) # kyoto

Dans le cas du code ci-dessus, puisque la colonne "adresse" de la ligne "a" est spécifiée, kyoto peut être obtenu.

img123.png

Lors de l'utilisation de iat, ce sera comme suit.

data = [
  ['taro', 'kyoto', '2020-01-01T12:00:00'],
  ['jiro', 'osaka', '2020-02-11T12:00:00'],
  ['saburo', 'nara', '2020-03-22T12:00:00']
]
df = pd.DataFrame(data = data, index = ['a', 'b', 'c'], columns = ['name', 'address', 'birth'])
print(df.iat[1,2]) #2020-02-11T12:00:00

img123.png

Puisque la colonne "2" de la ligne "1" est spécifiée, 2020-02-11T12: 00: 00 peut être obtenu. (Le numéro de ligne et le numéro de colonne commencent à 0)

Dataframe.loc & Dataframe.iloc [Extraction de lignes et de colonnes]

J'expliquerai loc, qui est si fréquent qu'il n'est pas exagéré de dire que c'est le plus important dans Dataframe. Si vous vous souvenez comment utiliser loc, vous pouvez presque gérer le contenu de base. La syntaxe de base de loc est la suivante. ** Lors de l'utilisation de tranches, l'écriture dans un tableau entraînera une erreur. ** **

Dataframe.loc[[<Étiquette de ligne>], [Étiquette de colonne]]
Dataframe.loc[Étiquette de ligne A:Étiquette de ligne B,Étiquette de colonne A:Étiquette de colonne B]
data = [
  ['taro', 'kyoto', '2020-01-01T12:00:00'],
  ['jiro', 'osaka', '2020-02-11T12:00:00'],
  ['saburo', 'nara', '2020-03-22T12:00:00']
]
df = pd.DataFrame(data = data, index = ['a', 'b', 'c'], columns = ['name', 'address', 'birth'])
#Extraction sur une seule rangée
print(df.loc[['a']])

#Extraction de plusieurs lignes
print(df.loc[['a', 'b']])

#Extraction d'une seule colonne
print(df.loc[:, ['name']])

#Extraction multi-colonnes
print(df.loc[:, ['name', 'address']])

#Extraction de combinaisons de lignes et de colonnes
print(df.loc[['a', 'c'], ['name', 'birth']])
print(df.loc['a':'c', ['name', 'birth']])

Même si les parties étiquette de ligne et étiquette de colonne ne sont pas écrites dans un tableau, une ligne et une colonne peuvent être extraites, mais le comportement est différent de l'extraction d'une ligne et d'une colonne dans le tableau. (Veuillez noter que cette spécification est également une source de confusion ...)

data = [
  ['taro', 'kyoto', '2020-01-01T12:00:00'],
  ['jiro', 'osaka', '2020-02-11T12:00:00'],
  ['saburo', 'nara', '2020-03-22T12:00:00']
]
df = pd.DataFrame(data = data, index = ['a', 'b', 'c'], columns = ['name', 'address', 'birth'])
#Extraction sur une seule rangée
df.loc[['a']]
type(df.loc[['a']]) # pandas.core.frame.DataFrame

#Extraction sur une seule rangée
df.loc['a']
print(type(df.loc['a'])) # pandas.core.series.Series

#Extraction d'une seule colonne
df.loc[:, ['name']]
print(type(df.loc[:, ['name']])) # pandas.core.frame.DataFrame

#Extraction d'une seule colonne
df.loc[:, 'name']
print(type(df.loc[:, 'name'])) # pandas.core.series.Series

Comme le code ci-dessus, si vous le spécifiez avec un tableau, Dataframe sera retourné, et si vous le spécifiez sans tableau, Series sera retourné. (** Soyez prudent lorsque vous utilisez réellement **)

DataFrame.columns & DataFrame.index [Vérifier les libellés des colonnes et des lignes]

Il existe de nombreuses situations dans lesquelles vous souhaitez vérifier le type d'étiquettes de colonne et d'étiquettes de ligne définies dans le Dataframe. Vous pouvez vérifier la liste des étiquettes de colonne avec des colonnes et des étiquettes de ligne avec index.

data = [
  ['taro', 'kyoto', '2020-01-01T12:00:00'],
  ['jiro', 'osaka', '2020-02-11T12:00:00'],
  ['saburo', 'nara', '2020-03-22T12:00:00']
]
df = pd.DataFrame(data = data, index = ['a', 'b', 'c'], columns = ['name', 'address', 'birth'])
#Afficher l'étiquette de la colonne
print(df.columns) # Index(['name', 'address', 'birth'], dtype='object')

#Afficher l'étiquette de ligne
print(df.index) # Index(['a', 'b', 'c'], dtype='object')

DataFrame.shape [Obtenir le nombre de lignes et de colonnes]

Il arrive souvent que vous souhaitiez voir combien de lignes et de colonnes de données existent dans un Dataframe. Vous pouvez obtenir le nombre de lignes et de colonnes en utilisant la forme. Le premier taple renvoyé en forme est le nombre de lignes et le second est le nombre de colonnes.

data = [
  ['taro', 'kyoto', '2020-01-01T12:00:00'],
  ['jiro', 'osaka', '2020-02-11T12:00:00'],
  ['saburo', 'nara', '2020-03-22T12:00:00']
]
df = pd.DataFrame(data = data, index = ['a', 'b', 'c'], columns = ['name', 'address', 'birth'])
#Obtenez le nombre de lignes et de colonnes
print(df.shape) # (3, 3)

DataFrame.values [Obtenir un tableau numpy]

DataFrame est fourni avec des informations telles que les étiquettes de ligne et de colonne en plus des valeurs, mais si vous n'avez pas besoin d'informations d'étiquette et uniquement de données, vous pouvez le convertir en un tableau numpy.

data = [
  ['taro', 'kyoto', '2020-01-01T12:00:00'],
  ['jiro', 'osaka', '2020-02-11T12:00:00'],
  ['saburo', 'nara', '2020-03-22T12:00:00']
]
df = pd.DataFrame(data = data, index = ['a', 'b', 'c'], columns = ['name', 'address', 'birth'])
#Obtenez un tableau numpy
print(df.values)

img123.png

Si vous le convertissez en un tableau numpy, vous pouvez obtenir les données par la méthode d'accélération similaire à un tableau bidimensionnel normal. ** Veuillez noter que la méthode d'extraction des données est différente pour les tableaux DataFrame, Series et numpy. ** ** (C'est aussi une source de confusion ...)

#Les tableaux numpy peuvent accéder aux données tout comme les tableaux à deux dimensions ordinaires
#Extraire la 0ème ligne et la 1ère colonne
print(df.values[0][1]) # kyoto

#Extraire la ligne 0
print(df.values[0])

#Vous pouvez également utiliser des tranches
#Extraire la première ligne
print(df.values[:, 1]) # ['kyoto' 'osaka' 'nara']

finalement

Pandas est certes difficile, mais la référence officielle est écrite d'une manière très facile à comprendre, donc je pense que ce n'est pas un obstacle ridicule à comprendre si vous lisez attentivement la référence et poursuivez l'apprentissage. (Peut-être que j'y pense juste, mais ...). En particulier, 10 minutes aux pandas est compact et facile à comprendre, donc le premier Je le recommande vivement comme point de départ.

Je pense que vous avez utilisé l'expression "source de confusion" environ quatre fois dans cet article. Veuillez noter que cette partie est particulièrement compliquée, donc si vous ne la comprenez pas bien, il peut ne pas être possible de gérer lorsque la quantité de données augmente ou lorsque vous combinez des données.

La deuxième partie présentera enfin la méthode Pandas. Il y a tellement de types de méthodes qu'il est difficile d'apprendre, mais je les écrirai aussi facilement que possible, alors merci. (^^ ♪ Puis (^ _-) - ☆

Recommended Posts

Une introduction aux Pandas pour apprendre tout en souffrant [Partie 1]
Introduction à Python que même les singes peuvent comprendre (partie 3)
Introduction à Python que même les singes peuvent comprendre (partie 1)
Introduction à Python que même les singes peuvent comprendre (partie 2)
Introduction à Word2Vec que même les chats peuvent comprendre
Une introduction à Cython sans aller plus loin
Introduction à Cython sans approfondir -2-
Introduction à PyQt4 Partie 1
Introduction à Python numpy pandas matplotlib (pour ~ B3 ~ part2)
Une introduction à l'API de socket moderne pour apprendre en C
Introduction à Private TensorFlow
Une introduction à l'apprentissage automatique
Une introduction à la programmation Python
Introduction à l'optimisation bayésienne
Introduction à Ansible Part «Inventaire»
Introduction à Python pour, pendant
Introduction à Ansible Part ④'Variable '
8 services que même les débutants peuvent apprendre Python (des débutants aux utilisateurs avancés)
Introduction de "scikit-mobility", une bibliothèque qui vous permet d'analyser facilement les données de flux humain avec Python (Partie 1)
Filtre de Kalman que vous pouvez comprendre
Introduction à Ansible Partie 2 'Grammaire de base'
Une introduction à Mercurial pour les non-ingénieurs
Introduction à Python Hands On Partie 1
Sites Web pour vous aider à apprendre la programmation
[Introduction à Python] Utilisons les pandas
[Introduction à Python] Utilisons les pandas
Python facile à apprendre en écrivant
[Introduction à Python] Utilisons les pandas
Premiers pas avec Python pour les non-ingénieurs
Introduction à Ansible Partie 1 Hello World !! '
[Tutoriel Python] Une introduction facile à Python
[Pour les débutants] Super introduction aux réseaux de neurones que même les chats peuvent comprendre
[Python3] Code qui peut être utilisé lorsque vous souhaitez découper une image dans une taille spécifique
[Python3] Code qui peut être utilisé lorsque vous souhaitez modifier l'extension d'une image à la fois