2015-02-26 2 views
4

Хорошо, так что у меня есть панды dataframe х, и я заинтересован в извлечении значения из него:Распаковка только строковый элемент из панд dataframe

> x.loc[bar==foo]['variable_im_interested_in'] 

Допустим, что возвращает следующее, из pandas.core.series.Series Тип:

24 Boss 
Name: ep_wb_ph_brand, dtype: object 

Но все, что я хочу, это строка 'Boss'. Обертывание в первой строке кода в str() не помогает, я просто получаю:

'24 Boss\nName: ep_wb_ph_brand, dtype: object' 

Как только извлечь строку?

+0

вы можете добавить вывод 'типа (x.loc [бар == Foo] [ 'variable_im_interested_in'])' ... это непонятно мне, что возвращается. Если «Босс» является ожидаемым значением, хранящимся в соответствующей ячейке, нет причин, по которым этот номер индекса, имя и тип dtype должны быть частью значения. – ely

+0

да @Mr. F это pandas.core.series.Series –

+1

Ах, это серия 1-й серии. Поэтому просто войдите в 0-ю запись! Попробуйте следующее: 'x.loc [bar == foo] ['variable_im_interested_in'] [0]'. – ely

ответ

3

на основе ваших комментариев, этот код возвращает длину-1 панд Серия:

x.loc[bar==foo]['variable_im_interested_in'] 

Если присвоить это значение переменной, то вы можете просто получить доступ к 0-й элемент, чтобы получить то, что вы ищете:

my_value_as_series = x.loc[bar==foo]['variable_im_interested_in'] 

# Assumes the index to get is number 0, but from your example, it might 
# be 24 instead. 
plain_value = my_value_as_series[0] 

# Likewise, this needs the actual index value, not necessarily 0. 
also_plain_value = my_value_as_series.ix[0] 

# This one works with zero, since `values` is a new ndarray. 
plain_value_too = my_value_as_series.values[0] 

вы не имеют присвоить переменной, чтобы сделать это, так что вы могли бы просто написать x.loc[bar==foo]['variable_im_interested_in'][0] (или simil ar для других опций), но все больше и больше аксессуар и синтаксис синтаксического индексирования на одно выражение обычно являются плохими идеями.

Также обратите внимание, что вы можете непосредственно индекс столбца интереса внутри вызова loc:

x.loc[bar==foo, 'variable_im_interested_in'][24] 
+0

Спасибо г-ну Ф. Первые две ошибки броска ([0] и .ix [0]), но работает третья стратегия (.values ​​[0]). –

+1

@ HillarySanders Да, первые две ошибки ожидаются. В вашем случае печатается, что номер индекса равен 24, поэтому вам нужно использовать 24 вместо 0. Вы * не будете * делать это для случая, когда используете '.values', так как это новый ndarray, переиндексированный из 0. – ely

+0

ahhh okay получил его. спасибо –

1

Вы можете использовать функцию string.split.

>>> s = '24 Boss\nName: ep_wb_ph_brand, dtype: object' 
>>> s.split()[1] 
'Boss' 
+1

Да. Вид на крайнее средство; это кажется неэлегантным. Но ты прав. –

0

код, чтобы получить последнее значение массива (запустить в записной книжке Jupyter, с> s отметил):

> import pandas 
> df = pandas.DataFrame(data=['a', 'b', 'c'], columns=['name']) 
> df 
    name 
0 a 
1 b 
2 c 
> df.tail(1)['name'].values[0] 
'c' 
+0

Это красиво и pythonic! Почему этот синтаксис vs «df ['name']. Tail (1) .values ​​[0]« То же? – jouell

+0

Да, то же самое .. – dfrankow

 Смежные вопросы

  • Нет связанных вопросов^_^