2016-07-23 83 views
20

我有这样一个电子表格:熊猫可以使用列作为索引吗?

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] 
+0

的[重新定义索引在数据帧熊猫对象]可能的复制(https://stackoverflow.com/questions/10457584/redefining-the-index-in-a-pandas-dataframe-object) –

+0

我会不同意。即使问题的本质是相似的(因此答案也是如此),当他们想“为索引创建一列”时,人们会搜索类似这个问题的东西。 – mhoff

回答

49

是的,set_index你可以让你的Locality行索引。

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

如果未提供inplace=True,​​返回修改的数据帧作为一个结果。

例子:

> 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

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