Pandalar sütun olarak dizin kullanabilir mi?


114

Bunun gibi bir elektronik tablom var:

Locality    2005    2006    2007    2008    2009

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

Sütunu satırla manuel olarak değiştirmek istemiyorum. Pandaların bir listeye veri okurken aşağıdaki gibi kullanılması mümkün olabilir mi:

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


5
Katılmıyorum. Sorunun özü benzer olsa da (ve dolayısıyla cevap da öyle), insanlar 'dizine bir sütun yapmak' istediklerinde bu soruya benzer bir şey arayacaklar.
Michael Hoff

Yanıtlar:


222

Evet, birlikte set_index yapabilirsiniz Localitysenin satır dizini.

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

Eğer inplace=Truesağlanmaz, set_indexsonuç olarak modifiye dataframe döndürür.

Misal:

> 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

Dizini kullanarak zaten açıklandığı gibi değiştirebilirsiniz set_index. Satırları sütunlarla manuel olarak değiştirmenize gerek yoktur, data.Tpandalarda bunu sizin için yapan bir transpose ( ) yöntemi vardır:

> 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

daha sonra veri çerçevesi sütun değerlerini getirebilir ve bunları bir listeye dönüştürebilirsiniz:

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

[427000, 448000]

3

Pandas'ta elektronik tablodan okurken mevcut olan index_col parametresini kullanarak sütun indeksini ayarlayabilirsiniz .

İşte benim çözümüm:

  1. İlk olarak, pandaları pd olarak içe aktarın: import pandas as pd

  2. Pd.read_excel () kullanarak dosya adını okuyun ( verileriniz bir elektronik tablodaysa) ve index_col parametresini belirterek dizini 'Konum' olarak ayarlayın.

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

    Bu aşamada 'xlrd adlı modül yok' hatası alırsanız, bunu kullanarak kurun pip install xlrd.

  3. Görsel inceleme için, df.head()aşağıdaki çıktıyı yazdıracak olan veri çerçevesini okuyunsc

  4. Artık veri çerçevesinin istenen sütunlarının değerlerini alabilir ve yazdırabilirsiniz.

    sc2

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.