Wie wäre es, die Datendateien einzeln anstatt zu lesen, da Sie nicht per se in der Panel
Struktur interessiert zu sein scheinen:
import glob
import pandas as pd
for filename in glob.glob('*.txt'):
df = pd.read_csv(filename)
df['total_sum'] = df[["column1", "column2", "column3"]].sum(axis=1) # sum total reads
df.plot(kind='bar')
Alternativ nehmen Sie einen Blick auf pd.Panel.to_frame()
Panel
zu DataFrame
zu konvertieren. Zum Beispiel mit einem Panel
von einem dict
mit zwei DataFrames
:
df = pd.DataFrame(np.random.random(size=(20, 10)))
panel = pd.Panel.from_dict({'1': df, '2': df.add(10)})
<class 'pandas.core.panel.Panel'>
Dimensions: 2 (items) x 20 (major_axis) x 10 (minor_axis)
Items axis: 1 to 2
Major_axis axis: 0 to 19
Minor_axis axis: 0 to 9
to_frame()
Mit bekommt man eine Langformat DataFrame
mit zwei Spalten und ein MultiIndex
mit einer Länge von row
x column
. Plotten, könnten Sie die columns
von data_frame
iterieren .items()
und verwenden .unstack()
in andere Formate zu konvertieren geeignet zum Plotten:
data_frame = panel.to_frame()
MultiIndex: 200 entries, (0, 0) to (19, 9)
Data columns (total 2 columns):
1 200 non-null float64
2 200 non-null float64
dtypes: float64(2)
memory usage: 4.7+ KB
None
for i, data in data_frame.items():
data.unstack().plot()
Auf Leistung - wenn Sie aus einem Panel zu starten, Summieren ist schneller als die Gruppierung und Entstapeln. Es ist auch schneller als das Summieren eines einzelnen Datenrahmens.
%timeit panel.sum(axis=1)
10000 loops, best of 3: 111 µs per loop
%timeit panel.to_frame().groupby(data_frame.columns, axis=1).apply(lambda x: x.unstack(0).sum(axis=1))
100 loops, best of 3: 3.63 ms per loop
df = data_frame.unstack(0)
%timeit df.loc[:, '1'].sum(axis=1)
1000 loops, best of 3: 409 µs per loop
Wie würden Sie die Anweisung 'for' schreiben, wenn Sie' pd.Panel.to_frame() 'verwendet haben? Gibt es einen Unterschied in der Leistung in der Regel eine Datenstruktur über eine andere, ein "Panel" oder "Glob"? – ShanZhengYang
Siehe Update zur Verwendung von 'to_frame()'. 'glob' analysiert nur die Dateinamen, Sie würden dies auf jeden Fall verwenden. Die Frage ist, ob man die Dateien zuerst zu einem Panel zusammenfasst, um sie dann wieder in Dataframes aufzuteilen oder sie einzeln zu lesen. Letztere wahrscheinlich effizienter. – Stefan
Ich verstehe deinen Standpunkt. Danke – ShanZhengYang