将Pandas DataFrame与多名称列一起使用

时间:2016-05-10 15:13:56

标签: python pandas

我使用Pandas来存储系统生成列名的大型数据集。像这样:

import numpy as np
import pandas as pd
df = pd.DataFrame([[0,1,2],[10,11,12],[20,21,22]],columns=["r0","r1","r2"])

这些系统名称也有更有意义的名称,用户实际可以理解。到目前为止,我已经使用如下字典映射它们:

altName = {"Objective 1":"r0", "Result 5":"r1", "Parameter 2":"r2"}

以便可以像这样访问它们:

print(df[altName["Objective 1"]])

这样可行,但它会导致很难读取代码(想想带有多个变量的绘图命令等)。我不能简单地将列重命名为友好名称,因为有时我需要访问这两个列,但我不确定如何在没有字典的情况下同时支持这两个列。

是否可以为列分配多个名称,或者执行某种允许我使用这两种访问方法的隐式映射:

print(df["r0"])
print(df["Objective 1])

我已经想过制作我自己的子类来检测一个keyerror,然后无法使用备用名字的二级词典并试试,但我不确定我能做什么同时保留所有其他DataFrame功能(我自我评估我的Python初学者接近中级)。

非常感谢你的建议。

1 个答案:

答案 0 :(得分:4)

是的,你可以。数据帧只是numpy数组的包装器,所以你可以将包装器相乘:

一个例子:

df=pd.DataFrame([ [0,1], [2,3] ],list('AB'), columns=list('CD'))
df2=pd.DataFrame(df.values,df.index, columns=list('EF'))
df.loc['A','C']=999

然后df2也受到影响:

In [407]: df2['E']
Out[407]: 
A    999
B      2
Name: E, dtype: int32