인덱스 및 객체 유형이 아닌 Pandas DataFrame에서 값을 가져 오는 방법


104

다음 DataFrame이 있다고 가정하십시오.

문자 번호
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)

이제 Letters 열에서 C 값을 얻고 싶습니다.

명령 줄

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

돌아올 것이다

2C
이름 : 문자, dtype : 개체

두 줄 전체 출력이 아닌 C 값만 얻을 수있는 방법은 무엇입니까?


6
관련이없는 메모에서, 당신의 DataFrame을 contruct 할 수있는 더 좋은 방법이있다 :pd.DataFrame({'Letters': letters, 'Numbers': numbers})
JoeCondron

답변:


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

그러면 해당 선택에서 반환 된 인덱스 / 시리즈의 첫 번째 요소가 반환됩니다. 이 경우 값은 항상 첫 번째 요소입니다.

편집하다:

또는 loc ()을 실행하고 그런 식으로 첫 번째 요소에 액세스 할 수 있습니다. 이것은 더 짧았으며 과거에 구현 한 방식입니다.


2
나는이 방법을 좋아하지만 경고를 받고있다.FutureWarning: "item" has been deprecated and will be removed in a future version
AlexG

2
@AlexG : 대신 이것을 사용할 수 있습니다 : df[df.Letters=='C'].Letters.iloc[0]. 결과 시리즈에서 첫 번째 요소 (유일한 요소이기도 함)를 생성합니다.
Anh-Thi DINH

loc [: 1]을 사용하면 여전히 값 옆에 인덱스가 표시됩니다. :(
Sonic Soul

@AlexG 및 @Sonic Soul : df[df.Letters=='C'].Letters.squeeze()대신 사용해보십시오 . 이것은 같은 방식으로 작동합니다. :)
user78910

52

values속성을 사용하여 값을 np 배열로 반환 한 다음 사용 [0]하여 첫 번째 값을 가져옵니다.

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

Out[4]:
'C'

편집하다

개인적으로 아래 첨자 연산자를 사용하여 열에 액세스하는 것을 선호합니다.

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

이 열 이름에 공백이나 대시 할 수 있습니다 문제 방지 -에 접속하여 의미 ..


1
.열 이름이 숫자 값으로 시작하거나 열 이름에 공백과 같은 알파벳이 아닌 문자가있는 경우 예를 들어 항상 작동하지 않으므로 열에 액세스 하기 위해 를 개인적으로 사용하지 않으므로 항상 선호합니다df['col_name']
EdChum

내가 참조. 그래서 내가 보는 모든 곳에서 항상 df['col_name']표기법 대신 표기법을 찾았습니다 .. 다시 한 번 감사드립니다.
Eduardo

1
실제로는 중요하지 않지만 선택에서 점 표기법을 사용하여 'Letters'열에 액세스합니다. df.loc [df.Letters == 'C']. 열 이름에 공백이있는 경우 CSV 또는 Excel 파일에서 가져올 때와 같이 변환기를 사용하여이를 제거해야합니다.
valkn0t

@ 토마스 아토 내 대답을 업데이 트됩니다하지만 난 그게 필요한 경우가 아니면 추가 단계로 열을 모딩에 동의,이 경우에 나는 그것이 차이가 없습니다 동의
EdChum

1
import pandas as pd

dataset = pd.read_csv("data.csv")
values = list(x for x in dataset["column name"])

>>> values[0]
'item_0'

편집하다:

실제로 이전 배열처럼 데이터 세트를 인덱싱 할 수 있습니다.

import pandas as pd

dataset = pd.read_csv("data.csv")
first_value = dataset["column name"][0]

>>> print(first_value)
'item_0'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.