Bisakah panda menggunakan kolom sebagai indeks?


114

Saya memiliki spreadsheet seperti ini:

Locality    2005    2006    2007    2008    2009

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

Saya tidak ingin menukar kolom dengan baris secara manual. Mungkinkah menggunakan data bacaan panda ke daftar seperti ini:

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


5
Saya tidak setuju. Meskipun esensi pertanyaannya serupa (dan oleh karena itu juga jawabannya), orang akan mencari pertanyaan seperti ini ketika mereka ingin 'membuat kolom ke indeks'.
Michael Hoff

Jawaban:


222

Ya, dengan set_index Anda dapat membuat Localityindeks baris Anda.

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

Jika inplace=Truetidak tersedia, set_indexkembalikan dataframe yang dimodifikasi sebagai hasil.

Contoh:

> 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

Anda dapat mengubah indeks seperti yang sudah dijelaskan menggunakan set_index. Anda tidak perlu menukar baris dengan kolom secara manual, ada metode transpose ( data.T) di panda yang melakukannya untuk Anda:

> 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

maka Anda dapat mengambil nilai kolom dataframe dan mengubahnya menjadi daftar:

> newdf['ABBOTSFORD'].values.tolist()

[427000, 448000]

3

Anda dapat mengatur indeks kolom menggunakan parameter index_col yang tersedia saat membaca dari spreadsheet di Pandas.

Inilah solusi saya:

  1. Pertama, impor panda sebagai pd: import pandas as pd

  2. Baca nama file menggunakan pd.read_excel () (jika Anda memiliki data di spreadsheet) dan setel indeks ke 'Lokalitas' dengan menentukan parameter index_col.

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

    Pada tahap ini jika Anda mendapatkan kesalahan 'tidak ada modul bernama xlrd', instal menggunakan pip install xlrd.

  3. Untuk pemeriksaan visual, baca menggunakan kerangka data df.head()yang akan mencetak keluaran berikut sc

  4. Sekarang Anda dapat mengambil nilai dari kolom yang diinginkan dari kerangka data dan mencetaknya

    sc2

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.