2015-06-11 12 views
23

że mam następujący DataFrameJak uzyskać wartość z pandy DataFrame a nie rodzaj indeksu i obiektów

 
Letter Number 
A   1 
B   2 
C   3 
D   4 

który można uzyskać poprzez następujący kod

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) 

Teraz chcę aby uzyskać wartość C z kolumny Litery.

Linia komend

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

powróci

 
2 C 
Name: Letters, dtype: object 

Moje pytanie brzmi: w jaki sposób mogę uzyskać tylko wartość C, a nie całe dwa wyjście liniowe?

Dziękuję bardzo.
Eduardo

+0

W przypadku niepowiązanej notatki istnieje lepszy sposób na skonstruowanie DataFrame: '' 'pd.DataFrame ({'Letters': letters, 'Numbers': numbers})' '' – JoeCondron

+0

Joe, dzięki za komentarz. Poprawi mój kod. – Eduardo

Odpowiedz

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

ta zwraca pierwszy element w indeksie/Seria wrócił z tego wyboru. W tym przypadku wartość jest zawsze pierwszym elementem.

EDIT:

Albo można uruchomić loc() i dostęp do pierwszego elementu w taki sposób. To było krótsze i jest to sposób, w jaki wdrożyłem go w przeszłości.

+0

Dzięki, to było dokładnie to, czego szukałem. – Eduardo

10

pomocą atrybutu values do zwracania wartości w tablicy NP, a następnie użyć [0] uzyskać pierwszą wartość:

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

Out[4]: 
'C' 

EDIT

Ja osobiście wolę, aby przejść do kolumny za pomocą operatorów indeksy dolne:

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

Pozwala to uniknąć problemów, gdy nazwy kolumn mogą mieć spacji ani myślników - co oznacza, że ​​dostęp za pomocą ..

+1

Dzięki za twój przykład Ed. Zbadam kilka zastosowań loc. – Eduardo

+0

Osobiście nie używam '.', aby uzyskać dostęp do kolumn, ponieważ nie zawsze będzie działać na przykład, jeśli nazwa kolumny zaczyna się od wartości liczbowej lub są znaki niealfa, takie jak spacja w nazwie kolumny, więc zawsze wolę'. df ['col_name'] ' – EdChum

+0

Rozumiem. Właśnie dlatego wszędzie, gdzie patrzę, zawsze znajdowałem notację 'df ['col_name']' zamiast notacji '.'. Dzięki jeszcze raz. – Eduardo

Powiązane problemy