Чи можуть панди використовувати стовпчик як індекс?


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
Я б не погодився. Незважаючи на те, що суть питання схожа (а отже, і відповідь), люди будуть шукати щось подібне до цього питання, коли хочуть "зробити стовпчик до індексу".
Майкл Хофф

Відповіді:


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

Індекс стовпців можна встановити, використовуючи параметр index_col, доступний під час читання з електронної таблиці в Pandas.

Ось моє рішення:

  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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.