【问题标题】:Could pandas use column as index?熊猫可以使用列作为索引吗?
【发布时间】:2016-11-27 07:12:25
【问题描述】:

我有一个这样的电子表格:

Locality    2005    2006    2007    2008    2009

ABBOTSFORD  427000  448000  602500  600000  638500
ABERFELDIE  534000  600000  735000  710000  775000
AIREYS INLET459000  440000  430000  517500  512500

我不想手动将列与行交换。是否可以像这样使用 pandas 将数据读取到列表中:

data['ABBOTSFORD']=[427000,448000,602500,600000,638500]
data['ABERFELDIE']=[534000,600000,735000,710000,775000]
data['AIREYS INLET']=[459000,440000,430000,517500,512500]

【问题讨论】:

标签: python excel pandas


【解决方案1】:

是的,使用set_index,您可以将Locality 设为您的行索引。

data.set_index('Locality', inplace=True)

如果未提供inplace=Trueset_index 将返回修改后的数据帧作为结果。

例子:

> import pandas as pd
> df = pd.DataFrame([['ABBOTSFORD', 427000, 448000],
                     ['ABERFELDIE', 534000, 600000]],
                    columns=['Locality', 2005, 2006])

> df
     Locality    2005    2006
0  ABBOTSFORD  427000  448000
1  ABERFELDIE  534000  600000

> df.set_index('Locality', inplace=True)
> df
              2005    2006
Locality                  
ABBOTSFORD  427000  448000
ABERFELDIE  534000  600000

> df.loc['ABBOTSFORD']
2005    427000
2006    448000
Name: ABBOTSFORD, dtype: int64

> df.loc['ABBOTSFORD'][2005]
427000

> df.loc['ABBOTSFORD'].values
array([427000, 448000])

> df.loc['ABBOTSFORD'].tolist()
[427000, 448000]

【讨论】:

    【解决方案2】:

    您可以使用set_index 来更改索引。 您不需要手动将行与列交换,pandas 中有一个转置 (data.T) 方法可以为您完成:

    > df = pd.DataFrame([['ABBOTSFORD', 427000, 448000],
                        ['ABERFELDIE', 534000, 600000]],
                        columns=['Locality', 2005, 2006])
    
    > newdf = df.set_index('Locality').T
    > newdf
    
    Locality    ABBOTSFORD  ABERFELDIE
    2005        427000      534000
    2006        448000      600000
    

    然后您可以获取数据框列值并将它们转换为列表:

    > newdf['ABBOTSFORD'].values.tolist()
    
    [427000, 448000]
    

    【讨论】:

      【解决方案3】:

      您可以使用从 Pandas 中的电子表格读取时可用的 index_col 参数设置列索引。

      这是我的解决方案:

      1. 首先,将 pandas 导入为 pd: import pandas as pd

      2. 使用 pd.read_excel() 读取文件名(如果您的数据在电子表格中)并通过指定 index_col 参数将索引设置为“Locality”。

        df = pd.read_excel('testexcel.xlsx', index_col=0)

        在此阶段,如果您收到“没有名为 xlrd 的模块”错误,请使用 pip install xlrd 安装它。

      3. 对于目视检查,使用df.head() 读取数据帧,这将打印以下输出

      4. 现在您可以获取数据框所需列的值并打印出来

      【讨论】:

        【解决方案4】:

        另一种简单的方法是将列分配给数据框索引

        data = {
          'Locality': ['ABBOTSFORD', 'ABERFELDIE', 'AIREYS INLET'],
          '2005': [427000, 534000, 459000 ],
          '2006': [448000, 448000, 448000],
          '2007': [602500, 602500, 602500],
          '2008': [600000, 710000, 517500],
          '2009': [638500, 775000, 512500]
        }
        
        df = pd.DataFrame(data)
        
        # set the locality column as the index
        df.index = df['Locality']
        

        如果您不再希望将 Locality 列作为列,则可以直接删除它

        df.drop('Locality', axis=1)
        

        你最终会得到

        
                      | 2005     | 2006   | 2007   | 2008   | 2009
        Locality      |-------------------------------------------              
        ABBOTSFORD    | 427000   | 448000 | 602500 | 600000 | 638500
        ABERFELDIE    | 534000   | 448000 | 602500 | 710000 | 775000
        AIREYS INLET  | 459000   | 448000 | 602500 | 517500 | 512500
        

        【讨论】:

          猜你喜欢
          • 2018-04-09
          • 1970-01-01
          • 2017-03-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多