Die Hauptdatenstruktur in pandas ist die eindimensionale oder Linie Serie. Es gibt pandas.Series.html) und zweidimensionale oder tabellarische DataFrame (http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.html). Dies ist das Hauptobjekt in Pandas und wird auch in Python for Data Analysis beschrieben.
Aber es gibt tatsächlich ein anderes Hauptobjekt. Es ist das dritte dreidimensionale [Panel](http: //pandas.pydata), das in Einführung in Datenstrukturen angezeigt wird. .org / pandas-docs / stabile / generierte / pandas.Panel.html).
Diese dreidimensionale Datenstruktur ist beispielsweise nützlich, wenn Sie beliebige Zahlen aus täglichen Tabellendaten extrahieren und statistische Analysen für Zeitreihenprotokolle durchführen möchten.
Panels können erstellt werden, indem ein dictionary-formatierter DataFrame oder ein dreidimensionales ndarray als Argument verwendet werden. Machen wir es konkret.
import pandas as pd
rng = pd.date_range('1/1/2014',periods=100,freq='D')
#Erstellen Sie einen Datenrahmen mit Zufallszahlen und setzen Sie den Index auf 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'])
#Erstellen Sie ein Panel-Objekt, indem Sie diese Datenrahmen kombinieren
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
Das Panel-Objekt wurde folgendermaßen erstellt. Jede Dimension wird als Elementachse, Hauptachse, Nebenachse bezeichnet.
In der Dokumentation (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Panel.html) finden Sie Informationen zu den Methoden dieses Objekts.
Zunächst wird es beliebt sein, über den Index zuzugreifen.
pf.ix[0] #Zugriff auf df1
pf.ix[1] #Zugriff auf df2
pf['df1'] #Dies ist auch der Zugriff auf df1
Auf diese Weise können Sie auf jede Tabelle in Panel zugreifen.
#Neue Spalte zur Tabelle hinzufügen
pf['df1']['E'] = pd.DataFrame(np.random.randn(100, 1), index = rng)
pf['df2']['E'] = pd.DataFrame(np.random.randn(100, 1), index = rng)
#Überprüfen Sie die Datenstruktur
pf.shape
#=> (3, 100, 4)
#df1 Greifen Sie auf 10 Spalten in Spalte E der Tabelle zu
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
Panel kann auch mit to_flame () in gestapelte Datenrahmen konvertiert werden. Für diesen gestapelten Datenrahmen können statistische Funktionen verwendet werden. Außerdem kann dieses Objekt mit to_panel () in das ursprüngliche Panel zurückgesetzt werden.
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
Angenommen, eine Anwendungsprotokolldatei wird täglich in einem Verzeichnis generiert, z. B. Fluentd. Bei der datumsübergreifenden Analyse dieser Protokolldatei ist es sehr praktisch, die Daten für einen Tag zu tabellieren und eine dreidimensionale Datenstruktur für die Zeitreihenanalyse zu verwenden.
Der Artikel des anderen Tages Ich werde das Programm neu schreiben und anwenden, um die Dateiliste des Verzeichnisses zu erhalten, das als Beispiel herauskam.
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)
Das von dieser Methode zurückgegebene Panel-Objekt ist eine dreidimensionale Datenstruktur, die mehrere Protokolldateien sammelt, sodass Sie statistische Funktionen zum Analysieren von Zeitreihendaten verwenden können.
Pandas können Panel verwenden, um mit 3D-Datenstrukturen zu arbeiten. Durch Hinzufügen einer weiteren Dimension zusätzlich zur Zeilen- und Spaltendatenstruktur ist dies für die Zeitreihendatenanalyse hilfreich.