Могут ли панды использовать столбец в качестве индекса?

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]
Чан Остин
источник
Возможный дубликат переопределения индекса в объекте DataFrame Pandas
Toothpick Anemone
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в pandas есть метод 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 () (если у вас есть данные в электронной таблице) и установите для индекса значение «Locality», указав параметр index_col.

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

    На этом этапе, если вы получите ошибку «нет модуля с именем xlrd», установите его, используя pip install xlrd.

  3. Для визуального осмотра прочтите фрейм данных, с помощью df.head()которого будет напечатан следующий вывод Южная Каролина

  4. Теперь вы можете получить значения желаемых столбцов фрейма данных и распечатать их.

    sc2

Штеффи Керан Рани Дж.
источник