web-dev-qa-db-ja.com

パンダはカラムをインデックスとして使用できますか?

このようなスプレッドシートがあります。

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]
66
Chan Austin

はい、 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]
136
Michael Hoff

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]
10
famargar