Как получить значение из Pandas DataFrame, а не индекс и тип объекта

27

Скажем, у меня есть следующий DataFrame

Letter    Number
A          1
B          2
C          3
D          4

Что можно получить с помощью следующего кода

import pandas as pd

letters=pd.Series(('A', 'B', 'C', 'D'))
numbers=pd.Series((1, 2, 3, 4))
keys=('Letters', 'Numbers')
df=pd.concat((letters, numbers), axis=1, keys=keys)

Теперь я хочу получить значение C из столбца Letters.

Командная строка

df[df.Letters=='C'].Letters

вернет

2    C
Name: Letters, dtype: object

Мой вопрос: как я могу получить только значение C, а не весь вывод из двух строк?

Большое спасибо.
Эдуардо

    
задан Eduardo 11.06.2015 в 19:48
источник
  • В несвязанной заметке есть более удобный способ скомпоновать ваш DataFrame: pd.DataFrame ({«Письма»: буквы, «Числа»: числа)) –  JoeCondron 11.06.2015 в 21:15
  • Джо, спасибо за ваш комментарий. Это улучшит мой код. –  Eduardo 12.06.2015 в 12:31

2 ответа

46
df[df.Letters=='C'].Letters.item()

Это возвращает первый элемент в индексе / серии, возвращенный из этого выбора. В этом случае значение всегда является первым элементом.

EDIT:

Или вы можете запустить loc () и получить доступ к первому элементу таким образом. Это было короче, и я использовал его в прошлом.

ответ дан valkn0t 11.06.2015 в 20:11
  • Спасибо, это именно то, что я искал. –  Eduardo 12.06.2015 в 12:37
14

Используйте атрибут values для возврата значений в виде массива np, а затем используйте [0] , чтобы получить первое значение:

In [4]:
df.loc[df.Letters=='C','Letters'].values[0]

Out[4]:
'C'

ИЗМЕНИТЬ

Я лично предпочитаю обращаться к столбцам, используя индексированные операторы:

df.loc[df['Letters'] == 'C', 'Letters'].values[0]

Это позволяет избежать проблем, когда имена столбцов могут иметь пробелы или дефишировать - , что означает, что доступ к ним осуществляется с использованием . .

    
ответ дан EdChum 11.06.2015 в 20:21
  • Спасибо за ваш пример Эд. Я изучу несколько применений loc. –  Eduardo 12.06.2015 в 12:37
  • Я лично не использую. для доступа к столбцам, так как это не всегда будет работать, например, если имя столбца начинается с числового значения, или есть не альфа-символы, такие как пробел в имени столбца, поэтому я всегда предпочитаю df ['col_name'] –  EdChum 12.06.2015 в 12:38
  • Я вижу. То почему везде я смотрю, я всегда нашел ноту df ['col_name'] вместо. нотации. Еще раз спасибо. –  Eduardo 12.06.2015 в 12:46
  • Это действительно несущественно, но в вашем выборе вы получаете доступ к столбцу «Письма», используя точечную нотацию; df.loc [df.Letters == 'C']. Если в именах столбцов есть пробелы, вероятно, вы должны использовать конвертеры для их удаления, как если бы вы импортировали из файла CSV или Excel. –  valkn0t 12.06.2015 в 17:23
  • @ thomas-ato Я обновлю свой ответ, но я не согласен с модификацией столбцов как дополнительного шага, если это не необходимо, в этом случае я согласен, что это не имеет никакого значения –  EdChum 12.06.2015 в 17:29