Skip to main content
 首页 » 编程设计

python之如何使用 Pandas 访问列中的列

2025年05月04日14rubylouvre

全部,

我有一个如下所示的数据框:df[['date','PRICE']]

df>> 
 
date                   Price 
                 PX_FIRST     PX_LAST 
 
2018-03-05        1.710       -0.511 
2018-03-06        1.725       -0.513 
2018-03-07        1.745       -0.511 
2018-03-08        1.750       -0.512 

如何获得与此类似的数据框?换句话说,我如何访问 PX_FIRST 和 PX_LAST。当我执行 df[['date','PRICE']] 时,它无法访问各个列。

  date           PX_FIRST     PX_LAST 
 
2018-03-05        1.710       -0.511 
2018-03-06        1.725       -0.513 
2018-03-07        1.745       -0.511 
2018-03-08        1.750       -0.512 

请您参考如下方法:

如果需要选择第一层Price值下的列:

df = df['Price'] 

或者使用DataFrame.xs :

df = df.xs('Price', axis=1) 
print (df) 
            PX_FIRST  PX_LAST 
Date                          
2018-03-05     1.710   -0.511 
2018-03-06     1.725   -0.513 
2018-03-07     1.745   -0.511 
2018-03-08     1.750   -0.512 

如果需要删除 MultiIndex 的顶层:

df.columns = df.columns.droplevel(0) 

但是如果更多列具有不同的第一级(Price、Price1)和第二级相同的值,请小心:

#create sample data 
df = pd.concat([df['Price'], df['Price'] * 0.4], keys=('Price','Price1'), axis=1) 
print (df) 
              Price           Price1         
           PX_FIRST PX_LAST PX_FIRST PX_LAST 
Date                                         
2018-03-05    1.710  -0.511    0.684 -0.2044 
2018-03-06    1.725  -0.513    0.690 -0.2052 
2018-03-07    1.745  -0.511    0.698 -0.2044 
2018-03-08    1.750  -0.512    0.700 -0.2048 

删除第一层:

df.columns = df.columns.droplevel(0) 
print (df) 
            PX_FIRST  PX_LAST  PX_FIRST  PX_LAST 
Date                                             
2018-03-05     1.710   -0.511     0.684  -0.2044 
2018-03-06     1.725   -0.513     0.690  -0.2052 
2018-03-07     1.745   -0.511     0.698  -0.2044 
2018-03-08     1.750   -0.512     0.700  -0.2048 

如果选择列 PX_FIRST 它返回 DataFrame,因为重复的列名:

print (df['PX_FIRST']) 
            PX_FIRST  PX_FIRST 
Date                           
2018-03-05     1.710     0.684 
2018-03-06     1.725     0.690 
2018-03-07     1.745     0.698 
2018-03-08     1.750     0.700 

如果需要两级选择,使用元组:

print (df[('Price', 'PX_FIRST')]) 
Date 
2018-03-05    1.710 
2018-03-06    1.725 
2018-03-07    1.745 
2018-03-08    1.750 
Name: (Price, PX_FIRST), dtype: float64