python - 通过轴号访问 pandas 轴

标签 python pandas

考虑pd.Panel pnpd.DataFrame df

import pandas as pd
import numpy as np

pn = pd.Panel(np.arange(27).reshape(3, 3, 3), list('XYZ'), list('abc'), list('ABC'))

pn.to_frame().rename_axis('item', 1).unstack()

enter image description here

df = pd.DataFrame(np.arange(9).reshape(3, 3), list('abc'), list('ABC'))

df

enter image description here


我可以访问items pn的轴与 pn.itemscolumns df的轴与 df.columns .

问题
但我如何获得 items pn的轴编号为0minor_axis轴编号为 2 ?使用尽可能多的接受参数 axis=0 的方法,我想象有一种直接的方法可以通过数字访问轴。

我做了什么
自定义函数

def get_axis(obj, axis=0):
    if isinstance(obj, pd.Panel):
        m = pd.Series(['items', 'major_axis', 'minor_axis'])
    else:
        m = pd.Series(['index', 'columns'])
    return obj.__getattribute__(m.loc[axis])

print(get_axis(pn, 2))
print(get_axis(pn, 1))
print(get_axis(pn, 0))
print(get_axis(df, 1))
print(get_axis(df, 0))

Index([u'A', u'B', u'C'], dtype='object')
Index([u'a', u'b', u'c'], dtype='object')
Index([u'X', u'Y', u'Z'], dtype='object')
Index([u'A', u'B', u'C'], dtype='object')
Index([u'a', u'b', u'c'], dtype='object')

最佳答案

使用.axes返回索引轴标签以及列轴标签的列表,然后您可以通过切片表示法访问它。

pn.axes
#[Index(['X', 'Y', 'Z'], dtype='object'),
# Index(['a', 'b', 'c'], dtype='object'),
# Index(['A', 'B', 'C'], dtype='object')]

然后,您可以提供切片来检索对象:

pn.axes[0]
#Index(['X', 'Y', 'Z'], dtype='object')

df.axes[0]
#Index(['a', 'b', 'c'], dtype='object')

关于python - 通过轴号访问 pandas 轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40027233/

相关文章:

python - emacs:清除(删除)emacs 中的 python 结果控制台

python - 重新索引 python 数据框正在创建 NaN 值

python - 根据逗号获取数组列中元素的数量,并将该计数转换为自己的列

python - `pip --allow-external` 的安全考虑

python - 编写 CSV Python

python - 通过整数位置和列标签获取标量(混合索引)

python - builtins.TypeError : __init__() missing 2 required positional arguments: 'height' and 'radius'

Python Pandas - 选择等于的数据框列

python - 使用 odbc_connect 从 SQLAlchemy 连接到 SQL 服务器

python - 在 Pandas 中最后一次出现特定值之后获取所有行