La structure de données principale dans pandas est la [Series] unidimensionnelle ou en ligne (http://pandas.pydata.org/pandas-docs/dev/generated/). Il existe pandas.Series.html) et DataFrame bidimensionnel ou tabulaire (http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.html). C'est l'objet principal des pandas et il est également détaillé dans Python for Data Analysis.
Mais il y a en fait un autre objet majeur. C'est le troisième [Panel] tridimensionnel (http: //pandas.pydata) qui apparaît dans Intro to Data Structures. .org / pandas-docs / stable / generated / pandas.Panel.html).
Cette structure de données tridimensionnelle est utile, par exemple, lorsque vous souhaitez extraire des nombres arbitraires à partir de données de table quotidiennes et effectuer une analyse statistique sur les journaux de séries chronologiques.
Les panneaux peuvent être créés en prenant un DataFrame au format dictionnaire ou un ndarray en trois dimensions comme argument. Faisons-le concrètement.
import pandas as pd
rng = pd.date_range('1/1/2014',periods=100,freq='D')
#Créez un bloc de données avec des nombres aléatoires et définissez l'index sur ABCD
df1 = pd.DataFrame(np.random.randn(100, 4), index = rng, columns = ['A','B','C','D'])
df2 = pd.DataFrame(np.random.randn(100, 4), index = rng, columns = ['A','B','C','D'])
df3 = pd.DataFrame(np.random.randn(100, 4), index = rng, columns = ['A','B','C','D'])
#Créer un objet Panel en combinant ces blocs de données
pf = pd.Panel({'df1':df1,'df2':df2,'df3':df3})
pf
#=>
# <class 'pandas.core.panel.Panel'>
# Dimensions: 3 (items) x 100 (major_axis) x 4 (minor_axis)
# Items axis: df1 to df3
# Major_axis axis: 2014-01-01 00:00:00 to 2014-04-10 00:00:00
# Minor_axis axis: A to D
L'objet Panel a été créé comme ceci. Chaque dimension est appelée axe Items, Major_axis, Minor_axis.
Consultez la documentation (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Panel.html) pour connaître les méthodes de cet objet.
Tout d'abord, il sera populaire d'accéder par index.
pf.ix[0] #Accès à df1
pf.ix[1] #Accès à df2
pf['df1'] #C'est aussi l'accès à df1
De cette façon, vous pouvez accéder à chaque table que Panel possède.
#Ajouter une nouvelle colonne à la table
pf['df1']['E'] = pd.DataFrame(np.random.randn(100, 1), index = rng)
pf['df2']['E'] = pd.DataFrame(np.random.randn(100, 1), index = rng)
#Vérifiez la structure des données
pf.shape
#=> (3, 100, 4)
#df1 Accéder à 10 colonnes de la colonne E du tableau
pf.ix['df1',-10:,'E']
#=>
# 2014-04-01 -1.623615
# 2014-04-02 1.878481
# 2014-04-03 -0.890555
# 2014-04-04 0.736037
# 2014-04-05 -1.451665
# 2014-04-06 0.126473
# 2014-04-07 0.997485
# 2014-04-08 -1.252981
# 2014-04-09 -1.136791
# 2014-04-10 -1.873199
Le panneau peut également être converti en trames de données empilées avec to_flame (). Vous pouvez utiliser des fonctions statistiques pour ce bloc de données empilées. De plus, cet objet peut être reconverti dans le Panel d'origine avec to_panel ().
pf.to_frame().to_panel()
#=>
# <class 'pandas.core.panel.Panel'>
# Dimensions: 3 (items) x 100 (major_axis) x 4 (minor_axis)
# Items axis: df1 to df3
# Major_axis axis: 2014-01-01 00:00:00 to 2014-04-10 00:00:00
# Minor_axis axis: A to D
Supposons qu'un fichier journal d'application soit généré quotidiennement dans un répertoire, par exemple Fluentd. Lors de l'analyse de ce fichier journal sur plusieurs dates, il est très pratique de tabuler les données pour une journée et d'utiliser une structure de données en trois dimensions pour l'analyse des séries chronologiques.
L'article de l'autre jour Je vais réécrire et appliquer le programme pour obtenir la liste des fichiers du répertoire qui est sorti comme exemple.
import sys
import os
import pandas as pd
def list_files(path):
dic = {}
for root, dirs, files in os.walk(path):
for filename in files:
fullname = os.path.join(root, filename)
if filename.startswith("fluent") \
and filename.endswith(".log"):
try:
print("Reading: %(filename)s" % locals())
df = pd.read_table(
os.path.join(path, filename), header=None)
dic[filename] = df
except pd.parser.CParserError:
print("Skip: %(filename)s" % locals())
return pd.Panel(dic)
Étant donné que l'objet Panel renvoyé par cette méthode est une structure de données en trois dimensions qui regroupe plusieurs fichiers journaux, vous pouvez utiliser des fonctions statistiques pour analyser les données de séries chronologiques.
les pandas peuvent utiliser Panel pour travailler avec des structures de données 3D. En ajoutant une autre dimension en plus de la structure de données de ligne et de colonne, il est utile pour l'analyse des données de séries chronologiques.
Recommended Posts