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


114

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

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]


5
私は同意しません。質問の本質は似ています(したがって、答えも同じです)が、「インデックスに列を作成する」場合、人々はこの質問のようなものを検索します。
マイケルホフ2017

回答:


222

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

13

すでに説明したように、を使用してインデックスを変更できますset_index。行と列を手動で交換する必要はありません。data.Tパンダにtranspose()メソッドがあります。

> 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. まず、パンダをpdとしてインポートします。 import pandas as pd

  2. pd.read_excel()を使用してファイル名を読み取り(スプレッドシートにデータがある場合)、index_colパラメータを指定してインデックスを「ローカリティ」に設定します。

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

    この段階で「xlrdという名前のモジュールがありません」エラーが発生した場合は、を使用してインストールしpip install xlrdます。

  3. 目視検査の場合df.head()、次の出力を印刷するデータフレームを読み取ります sc

  4. これで、データフレームの目的の列の値をフェッチして印刷できます

    sc2

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.