大熊猫可以使用列作为索引吗?

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

Locality    2005    2006    2007    2008    2009


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

我不想手动将列与行交换。有没有可能使用熊猫来读取数据,如下所示:

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

是的,使用 pandas.DataFrame.set_index可以使 'Locality'成为行索引。

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

如果没有提供 inplace=True,则 set_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]

您可以使用 set_index更改已经解释过的索引。 你不需要手动将行与列交换,熊猫中有一个转置(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]

您可以使用可用的 Index _ coll参数设置列索引,同时阅读熊猫中的电子表格。

我的解决办法是:

  1. 首先,进口大熊猫作为 PD: import pandas as pd

  2. 使用 Read _ excel ()读入文件名(如果您的数据在电子表格中) ,并通过指定 index _ col 参数将索引设置为“ Locality”。

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

    在这个阶段,如果您得到了一个“没有名为 xlrd 的模块”错误,那么使用 pip install xlrd安装它。

  3. 为了目视检查,使用 df.head()读取数据帧,它将打印以下输出 sc

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

    sc2

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

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