[PYTHON] Pandas

Qu'est-ce que les pandas

Pandas -wikipedia

pandas est une bibliothèque qui fournit des fonctions pour prendre en charge l'analyse des données dans le langage de programmation Python. En particulier, il fournit des structures de données et des opérations pour manipuler des tableaux numériques et des données chronologiques. Le développeur Wes McKinney veut un outil puissant et flexible pour l'analyse quantitative des données financières, et AQR Capital Management a commencé à développer des pandas en 2008. Avant de quitter AQR, il a persuadé son patron d'ouvrir la bibliothèque au public.

Format de données spécifique aux pandas

--Série unidimensionnelle

Créer un DataFrame

Créer à partir d'un tableau numpy

import numpy as np
import pandas as pd
d = np.array([[1,2,3],[4,5,6],[7,8,9]])
df = pd.DataFrame(d,columns=['a','b','c'])

>>> df
  a b c
0 1 2 3
1 4 5 6
2 7 8 9

Le nom de la ligne est df.index Le nom de la colonne est df.columns Peut être examiné à

Créer un type de liste à partir d'un dictionnaire avec des valeurs

df = pd.DataFrame({'a':[1,4,7],'b':[2,5,8]},'c':[3,6,9])

>>> df
  a b c
0 1 2 3
1 4 5 6
2 7 8 9

Lire le fichier csv

#La première ligne est traitée comme un nom de colonne
# index_cols=0 :Spécifiez le numéro de colonne de la colonne que vous souhaitez utiliser comme index à partir de 0

import pandas as pd
df = pd.read_csv('data/src/sample_pandas_normal.csv', index_col=0)
print(df)
#          age state  point
# name                     
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57

print(df.index.values)
# ['Alice' 'Bob' 'Charlie' 'Dave' 'Ellen' 'Frank']

print(df.columns.values)
# ['age' 'state' 'point']

Pour csv avec index, ajoutez "index_cols = 0"

Sans ** index_cols = 0 **, la colonne d'index ne sera pas reconnue.

df_header_index = pd.read_csv('data/src/sample_header_index.csv')
print(df_header_index)
#   Unnamed: 0   a   b   c   d
# 0        ONE  11  12  13  14
# 1        TWO  21  22  23  24
# 2      THREE  31  32  33  34
# ========================================================== #
df_header_index_col = pd.read_csv('data/src/sample_header_index.csv', index_col=0)
print(df_header_index_col)
#         a   b   c   d
# ONE    11  12  13  14
# TWO    21  22  23  24
# THREE  31  32  33  34

print(df_header_index_col.index)
# Index(['ONE', 'TWO', 'THREE'], dtype='object')

Ajouter "header = None" à csv sans en-tête

Dans le cas de csv sans en-tête, si pd.read_csv est utilisé tel quel, la première ligne sera des colonnes. Si ** header = None **, les numéros de série seront attribués aux colonnes de nom de colonne. Vous pouvez également définir les noms de colonne comme ** names = ('A', 'B', 'C', 'D') **.

11,12,13,14
21,22,23,24
31,32,33,34

import pandas as pd

df = pd.read_csv('data/src/sample.csv')
print(df)
#    11  12  13  14
# 0  21  22  23  24
# 1  31  32  33  34

print(df.columns)
# Index(['11', '12', '13', '14'], dtype='object')
# ========================================================== #
df_none = pd.read_csv('data/src/sample.csv', header=None)
print(df_none)
#     0   1   2   3
# 0  11  12  13  14
# 1  21  22  23  24
# 2  31  32  33  34
# ========================================================== #
df_names = pd.read_csv('data/src/sample.csv', names=('A', 'B', 'C', 'D'))
print(df_names)
#     A   B   C   D
# 0  11  12  13  14
# 1  21  22  23  24
# 2  31  32  33  34

Utilisez "usecols" lors de la lecture en spécifiant une colonne

df_none_usecols = pd.read_csv('data/src/sample.csv', header=None, usecols=[1, 3])
print(df_none_usecols)
#     1   3
# 0  12  14
# 1  22  24
# 2  32  34
# ========================================================== #
df_header_usecols = pd.read_csv('data/src/sample_header.csv',
                                usecols=lambda x: x is not 'b')
print(df_header_usecols)
#     a   c   d
# 0  11  13  14
# 1  21  23  24
# 2  31  33  34
# ========================================================== #
df_index_usecols = pd.read_csv('data/src/sample_header_index.csv',
                               index_col=0, usecols=[0, 1, 3])
print(df_index_usecols)
#         a   c
# ONE    11  13
# TWO    21  23
# THREE  31  33

Utilisez "skiprows" si vous souhaitez sauter des lignes

Si vous passez un entier à skiprows, ** ignorez le début du fichier du nombre de lignes ** et lisez-le.

df_none = pd.read_csv('data/src/sample.csv', header=None)
print(df_none)
#     0   1   2   3
# 0  11  12  13  14
# 1  21  22  23  24
# 2  31  32  33  34
# ========================================================== #
df_none = pd.read_csv('data/src/sample.csv', header=None, skiprows=2)
print(df_none)
#     0   1   2   3
# 0  31  32  33  34
# ========================================================== #
df_none_skiprows = pd.read_csv('data/src/sample.csv', header=None, skiprows=[1])
print(df_none_skiprows)
#     0   1   2   3
# 0  11  12  13  14
# 1  31  32  33  34
# ========================================================== #
#Si vous souhaitez ignorer la dernière ligne, cliquez sur "Ignorer le pied de page"=Définir sur "1"
# engine='python'Un avertissement peut se produire s'il n'est pas spécifié.
df_none_skipfooter = pd.read_csv('data/src/sample.csv', header=None,
                                 skipfooter=1, engine='python')
print(df_none_skipfooter)
#     0   1   2   3
# 0  11  12  13  14
# 1  21  22  23  24

Spécifiez le nombre de lignes que vous souhaitez lire avec "nrows"

df_none_nrows = pd.read_csv('data/src/sample.csv', header=None, nrows=2)
print(df_none_nrows)
#     0   1   2   3
# 0  11  12  13  14
# 1  21  22  23  24

Utilisez "dtype" pour spécifier le type de colonne

df_str_col = pd.read_csv('data/src/sample_header_index_dtype.csv',
                         index_col=0, dtype={'b': str, 'c': str})
print(df_str_col)
#        a    b    c  d
# ONE    1  001  100  x
# TWO    2  020  NaN  y
# THREE  3  300  300  z

print(df_str_col.dtypes)
# a     int64
# b    object
# c    object
# d    object
# dtype: object
# ========================================================== #
#Les colonnes DataFrame peuvent être converties en type avec "as type"
print(df['s_i'].astype(int))
# 0      0
# 1     10
# 2    200
# Name: s_i, dtype: int64

Valeur manquante

By default the following values are interpreted as NaN: ‘’, ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’, ‘-NaN’, ‘-nan’, ‘1.#IND’, ‘1.#QNAN’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘n/a’, ‘nan’, ‘null’. pandas.read_csv — pandas 0.23.0 documentation

"Na_values" lors de l'ajout de valeurs à traiter comme des valeurs manquantes

df_nan = pd.read_csv('data/src/sample_header_index_nan.csv', index_col=0)
print(df_nan)
#          a   b
# ONE    NaN NaN
# TWO      - NaN
# THREE  NaN NaN
# ========================================================== #
df_nan_set_na = pd.read_csv('data/src/sample_header_index_nan.csv',
                            index_col=0, na_values='-')
print(df_nan_set_na)
#         a   b
# ONE   NaN NaN
# TWO   NaN NaN
# THREE NaN NaN

Si vous voulez décider vous-même des valeurs manquantes, utilisez "na_values" et "keep_default_na = False" ensemble.

,a,b
ONE,,NaN
TWO,-,nan
THREE,null,N/A
# ========================================================== #
df_nan_set_na_no_keep = pd.read_csv('data/src/sample_header_index_nan.csv',
                                    index_col=0, na_values=['-', 'NaN', 'null'],
                                    keep_default_na=False)
print(df_nan_set_na_no_keep)
#          a    b
# ONE         NaN
# TWO    NaN  nan
# THREE  NaN  N/A

Utilisez "na_filter" pour éliminer les valeurs manquantes

,a,b
ONE,,NaN
TWO,-,nan
THREE,null,N/A
# ========================================================== #
df_nan_no_filter = pd.read_csv('data/src/sample_header_index_nan.csv',
                               index_col=0, na_filter=False)
print(df_nan_no_filter)
#           a    b
# ONE          NaN
# TWO       -  nan
# THREE  null  N/A

Utilisez "encoding = 'shift_jis'" lorsque les données contiennent du japonais

df_sjis = pd.read_csv('data/src/sample_header_shift_jis.csv',
                      encoding='shift_jis')
print(df_sjis)
#    a   b   c   d
#0 A 12 13 14
#1 22 23 24
#2 32 33 34

Read_csv, qui peut tout lire, est vraiment excellent ...

Si l'extension est .gz, .bz2, .zip, .xz, elle sera détectée et développée automatiquement. Si les extensions sont différentes, spécifiez explicitement les chaînes «gz», «bz2», «zip» et «xz» dans l'argument compression. De plus, il n'est pris en charge que lorsque le fichier csv seul est compressé. Une erreur se produit si plusieurs fichiers sont compressés. zip et xz sont pris en charge à partir de la version 0.18.1.

df_zip = pd.read_csv('data/src/sample_header.csv.zip')
df_web = pd.read_csv('http://www.post.japanpost.jp/zipcode/dl/oogaki/zip/13tokyo.zip',
                 header=None, encoding='shift_jis')

Créer une nouvelle ligne

#direction horizontale(axis = 1)Pour créer une colonne appelée Total
df['Total'] = df.sum(axis=1)

Statistiques récapitulatives

at, iat: sélectionner, obtenir / modifier la valeur d'un seul élément loc, iloc: sélectionnez, obtenez / modifiez la valeur d'un seul élément ou de plusieurs éléments

count: nombre d'éléments unique: nombre d'éléments de valeur uniques (uniques) haut: valeur la plus fréquente (mode) freq: fréquence des valeurs les plus fréquentes (nombre d'occurrences) moyenne: moyenne arithmétique std: écart type min: valeur minimale max: valeur maximale 50%: médiane 25%, 75%: 1/4 minutes, 3/4 minutes

import pandas as pd

df = pd.DataFrame({'a': [1, 2, 1, 3],
                   'b': [0.4, 1.1, 0.1, 0.8],
                   'c': ['X', 'Y', 'X', 'Z'],
                   'd': ['3', '5', '2', '1'],
                   'e': [True, True, False, True]})

print(df)
#    a    b  c  d      e
# 0  1  0.4  X  3   True
# 1  2  1.1  Y  5   True
# 2  1  0.1  X  2  False
# 3  3  0.8  Z  1   True

print(df.dtypes)
# a      int64
# b    float64
# c     object
# d     object
# e       bool
# dtype: object
# ========================================================== #
##Afficher les statistiques récapitulatives pour le bloc de données df
#Moyenne, écart type, valeur maximale, valeur minimale, valeur la plus fréquente, etc. pour chaque colonne

print(df.describe())
#               a         b
# count  4.000000  4.000000
# mean   1.750000  0.600000
# std    0.957427  0.439697
# min    1.000000  0.100000
# 25%    1.000000  0.325000
# 50%    1.500000  0.600000
# 75%    2.250000  0.875000
# max    3.000000  1.100000

print(type(df.describe()))
# <class 'pandas.core.frame.DataFrame'>

print(df.describe().loc['std']) #std est l'écart type
# a    0.957427
# b    0.439697
# Name: std, dtype: float64

print(df.describe().at['std', 'b'])
# 0.439696865275764

Utilisez "exclude = 'number'" lorsque vous souhaitez afficher le résultat d'une colonne autre qu'une valeur numérique telle qu'une chaîne de caractères.

** Si include = 'all', tous les types de colonnes seront inclus. ** **

print(df.describe(exclude='number'))
#         c  d     e
# count   4  4     4
# unique  3  4     2
# top     X  3  True
# freq    2  1     3

Graphique de données

df.plot() #Graphique linéaire
df.plot.bar(stacked=True) #Graphique à barres empilées
df.plot.scatter(‘Japanese’,’English’) #Diagramme de dispersion en spécifiant des colonnes
df[‘Japanese’].plot.hist() #Schéma en spécifiant des colonnes

Recommended Posts

Pandas
Notions de base sur les pandas
Notes de pandas
Mémorandum de Pandas
Notions de base sur les pandas
mémorandum pandas
mémo pandas
pandas SettingWithCopyWarning
mémo d'auto-apprentissage pandas
Mes pandas (Python)
Exercice Pandas (édition)
Excel-> pandas-> sqlite
[pandas] Conseils GroupBy
lecture de données pandas
À propos de décrire les pandas
liens relatifs aux pandas
Pandas de valeur manquante
9rep - Pandas MySQL
Mémorandum d'opération Pandas
Trier par pandas
mémo pandas python
série pandas partie 1
[Note] les pandas se désempilent
[Pour enregistrement] Mémorandum Pandas
Techniques d'accélération pandas prêtes à l'emploi
Visualisez rapidement avec les pandas
Résumé des notes personnelles des pandas
Apprenez les pandas en 10 minutes
Comment utiliser Pandas 2
Traitement des ensembles de données avec des pandas (1)
Échantillonnage bootstrap avec Pandas
Convertir 202003 en 2020-03 avec les pandas
Traitement des ensembles de données avec des pandas (2)
[Astuces] Ma note Pandas
Fusionner les ensembles de données avec les pandas
Tableau croisé à l'aide de Pandas
Mémo inversé Pandas
installation de jupyter et pandas
Fonctionnement de base des pandas
Pandas apprenant avec la chimioinfomatique
Mes pandas trop tard?
À propos de MultiIndex of Pandas
UnicodeDecodeError dans pandas read_csv
index et réindexation des pandas
Lire le fichier CSV: pandas
Lecture du fichier au format pandas
Fonctionnement de base des Pandas
Installer des pandas sur python2.6
pandas idxmax est lent
Visualisation des données avec les pandas
Manipulation des données avec les Pandas!
pandas rééchantillonner et rouler
Mélangez les données avec les pandas
Moyenne et liste des pandas
[Exercice Numpy / pandas / matplotlib 01]
Application Python: Pandas # 3: Dataframe
Python Basic --Pandas, Numpy-