如何打开用字典创建的pandas面板?

2024-10-03 19:23:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个子目录中有几个.txt文件,/subdirect/

这些文件是

file1.txt
file2.txt
file3.txt
file4.txt
...

使用glob,我可以将它们放入一个三维面板中,使用文件名作为键值对的键。在

^{pr2}$

现在,我想解压这些文件来单独操作每个数据帧并打印数据。在

for fname in data:
    df = pd.read_csv(fname)
    df['total_sum'] = df[["column1", "column2", "column3"]].sum(axis=1)  # sum total reads
    df.plot(kind='bar')

但是,我似乎没有正确地打开面板,因为尺寸已经完全改变了。在

如何打开熊猫面板?在


Tags: 文件数据txt面板df文件名fnamefile1
2条回答

既然您似乎对Panel结构本身不感兴趣,不如单独读取数据文件:

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')

或者,查看^{},将Panel转换为{}。例如,对于来自两个dictPanel和两个DataFrames

^{pr2}$

使用to_frame()可以得到两列的长格式DataFrame,以及长度为rowxcolumn。要绘制,可以使用.items()迭代columns,并使用.unstack()将其转换为适合绘图的格式:

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()

在性能方面-如果你从一个面板开始,求和比分组和取消堆叠要快。它也比对单个数据帧求和要快。在

%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

我会将文件解压缩为平面文件,并将文件名添加为列。现在可以使用文件名和dataframe中的任何属性创建多重索引。在

面板是在多索引功能得到改进之前使用的。平的比嵌套的好。在

import glob
import pandas as pd

dfs = []
for filename in glob.glob('*.txt'):
    df = pd.read_csv(filename)
    df['filename'] = filename
    dfs.append(df)
dfs = pd.concat(dfs, ignore_index=True)

相关问题 更多 >