我使用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初学者接近中级)。
非常感谢你的建议。
答案 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