데이터 프레임의 셀에서 값을 얻는 방법?


346

내 데이터 프레임에서 정확히 하나의 행을 추출하는 조건을 구성했습니다.

d2 = df[(df['l_ext']==l_ext) & (df['item']==item) & (df['wn']==wn) & (df['wd']==1)]

이제 특정 열에서 가치를 얻고 싶습니다.

val = d2['col_name']

그러나 결과적으로 하나의 행과 하나의 열 ( 즉, 하나의 셀) 을 포함하는 데이터 프레임을 얻습니다 . 내가 필요한 것이 아닙니다. 하나의 값 (하나의 부동 숫자)이 필요합니다. 팬더에서 어떻게 할 수 있습니까?


1
이러한 답변 중 일부를 시도했지만로 끝나는 경우이 게시물 에서 경고 및 가능한 해결 방법 / 해결 방법에 대한 설명을 SettingWithCopyWarning확인할 수 있습니다 .
cs95

답변:


429

행이 하나만있는 DataFrame이있는 경우을 사용하여 첫 번째 (전용) 행을 Series로 액세스 iloc한 다음 열 이름을 사용하여 값에 액세스하십시오 .

In [3]: sub_df
Out[3]:
          A         B
2 -0.133653 -0.030854

In [4]: sub_df.iloc[0]
Out[4]:
A   -0.133653
B   -0.030854
Name: 2, dtype: float64

In [5]: sub_df.iloc[0]['A']
Out[5]: -0.13365288513107493

1
@Sophologist가 이것을보고, 나는 모른다. 이 질문은 조금 이상하게 들리지만 상반기는 후자에게 중요하지 않은 것처럼 읽습니다. ( at정말 좋은 답변입니다. 이상하다고 생각합니다 ix:))
Andy Hayden

9
@Sophologist 나는 이것이 필요하다는 말이 우스운 것에 동의합니다. 조건부 인라인을 전달하려고 할 때도 작동하지 않습니다. my_df.loc[my_df['Col1'] == foo]['Col2']여전히 유형의 객체를 반환합니다<class 'pandas.core.series.Series'>
user5359531

16
이 솔루션은 값이 아닌 Series를 반환합니다.
Atte Juvonen

1
@AtteJuvonen 색인 / 열에 중복이 있는지 여부에 달려 있습니다 (at / iat는 중복 열에 예외가 발생하여 문제를 제기 함).
Andy Hayden

1
기묘한. 나는 loc은 이름을위한 것이고 iloc은 정수를위한 것을 계속 읽는다. 그러나 여기 iloc은 정수와 이름 모두를위한 것이다
mLstudent33

205

스칼라에 대한 빠른 액세스

In [15]: df = pandas.DataFrame(numpy.random.randn(5,3),columns=list('ABC'))

In [16]: df
Out[16]: 
          A         B         C
0 -0.074172 -0.090626  0.038272
1 -0.128545  0.762088 -0.714816
2  0.201498 -0.734963  0.558397
3  1.563307 -1.186415  0.848246
4  0.205171  0.962514  0.037709

In [17]: df.iat[0,0]
Out[17]: -0.074171888537611502

In [18]: df.at[0,'A']
Out[18]: -0.074171888537611502

9
나는이 대답을 많이 좋아합니다. 당신이 할 수있는 반면,하지만 .iloc[-1]['A']당신은 할 수없는 at[-1,'A']마지막 행 항목을 얻을 수
하르트 무트

3
이것은 하나의 요소 만 가져 오기 위해 쓸모없는 줄을 메모리에 복사하지 않기 때문에 답이되어야합니다.
bormat

3
@hartmut 당신은 항상 할 수 있습니다at[df.index[-1],'A']
cs95

105

1x1 데이터 프레임을 numpy 배열로 변환 한 다음 해당 배열의 첫 번째 유일한 값에 액세스 할 수 있습니다.

val = d2['col_name'].values[0]

10
조금 더 자세히 설명하여 답변의 품질을 향상 시키십시오.
Franck Gamess 2016 년

주석을 작성하기 전에이를 사용하여 초기 답변을 편집하십시오. 감사합니다
Franck Gamess 2016 년

2
이 방법을 선호하고 자주 사용합니다. 사용하는 데 .get_values()[0]에도 사용 됩니다.
aaronpenne

3
나는 이것이 pandas.series를 반환하지 않기 때문에 가장 좋은 대답이라고 생각하며 가장 간단합니다.
Sean McCarthy

이것이 Pandas가 제공하는 방법보다 어떤 이점이 있습니까?
AMC

28

대부분의 답변은 iloc위치별로 선택하기에 적합합니다.

레이블별로 선택 해야하는 경우 loc더 편리합니다.

명시 적으로 값을 얻으려면 (더 이상 사용되지 않는 df.get_value ( 'a', 'A')와 동일)

# this is also equivalent to df1.at['a','A']
In [55]: df1.loc['a', 'A'] 
Out[55]: 0.13200317033032932

18

열과 색인 이름으로 선택된 하나의 셀 값이 필요했습니다. 이 솔루션은 저에게 효과적이었습니다.

original_conversion_frequency.loc[1,:].values[0]


16

팬더 10.1 / 13.1 이후의 변화처럼 보입니다.

iloc을 사용할 수 없게되기 전에 10.1에서 13.1로 업그레이드했습니다.

이제 13.1에서는 iloc[0]['label']스칼라가 아닌 단일 값 배열을 얻습니다.

이처럼 :

lastprice=stock.iloc[-1]['Close']

산출:

date
2014-02-26 118.2
name:Close, dtype: float64

중복 항목이있는 Series의 경우에만 해당되어야한다고 생각합니다 ... 사실, 이것을 보지 못합니다.이를 보여주기 위해 작은 예를들 수 있습니까?
Andy Hayden

나는 iloc [] [] 또는 iloc [,] 판다 13.x를 사용하여 스칼라를 출력했습니다. 단지 iloc -1처럼 음의 지수 작동하지
timeislove

답변에서 이것을 보여주는 장난감 예제를 제공 할 수 있다면 정말 도움이 될 것입니다!
Andy Hayden

5

내가 찾은 가장 빠르고 쉬운 옵션은 다음과 같습니다. 501은 행 인덱스를 나타냅니다.

df.at[501,'column_name']
df.get_value(501,'column_name')

5
get_value더 이상 사용되지 않음 (v0.21.0 RC1 (2017 년 10 월 13 일)) 참조가 있습니다 .get_value and .set_value on Series, DataFrame, Panel, SparseSeries, and SparseDataFrame are deprecated in favor of using .iat[] or .at[] accessors (GH15269)
Shihe Zhang

4

사용할 수없는 팬더 0.10의 경우 iloca를 필터링 DF하고 열의 첫 번째 행 데이터를 가져옵니다 VALUE.

df_filt = df[df['C1'] == C1val & df['C2'] == C2val]
result = df_filt.get_value(df_filt.index[0],'VALUE')

1 개 이상의 행이 필터링 된 경우 첫 번째 행 값을 확보하십시오. 필터로 인해 데이터 프레임이 비어 있으면 예외가 발생합니다.


3
get_value더 이상 사용되지 않습니다 (v0.21.0 RC1 (2017 년 10 월 13 일)) 참조가 있습니다 .get_value and .set_value on Series, DataFrame, Panel, SparseSeries, and SparseDataFrame are deprecated in favor of using .iat[] or .at[] accessors (GH15269)
Shihe Zhang

그러나 iat또는 at열 이름을 기준으로 값을 얻을 수 없습니다.
sivabudh

4

이것이 좋은 습관인지 확실하지 않지만 시리즈를로 캐스팅하여 가치를 얻을 수 있음을 알았습니다 float.

예 :

rate

3 0.042679

이름 : 실업률, dtype : float64

float(rate)

0.0426789


다중 요소 시리즈에서도 작동합니까?
Praxiteles


-1
df_gdp.columns

색인 ([u'Country ', u'Country Code', u'Indicator Name ', u'Indicator Code', u'1960 ', u'1961', u'1962 ', u'1963', u'1964 ' , u'1965 ', u'1966', u'1967 ', u'1968', u'1969 ', u'1970', u'1971 ', u'1972', u'1973 ', u'1974' , u'1975 ', u'1976', u'1977 ', u'1978', u'1979 ', u'1980', u'1981 ', u'1982', u'1983 ', u'1984' , u'1985 ', u'1986', u'1987 ', u'1988', u'1989 ', u'1990', u'1991 ', u'1992', u'1993 ', u'1994' , u'1995 ', u'1996', u'1997 ', u'1998', u'1999 ', u'2000',u'2001 ', u'2002', u'2003 ', u'2004', u'2005 ', u'2006', u'2007 ', u'2008', u'2009 ', u'2010', u'2011 ', u'2012', u'2013 ', u'2014', u'2015 ', u'2016'], dtype = 'object')

df_gdp[df_gdp["Country Code"] == "USA"]["1996"].values[0]

8100000000000.0


4
이것이 답변입니까, 질문입니까?
Vega

4
스택 오버플로에 오신 것을 환영합니다! 제한적이고 즉각적인 도움을 줄 수있는 코드 스 니펫에 감사드립니다. 적절한 설명은 왜 이것이 문제에 대한 좋은 해결책인지 설명함으로써 장기적인 가치 를 크게 향상시킬 것이며 , 다른 비슷한 질문을 가진 미래 독자들에게 더 유용 할 것입니다. 가정을 포함하여 설명을 추가하려면 답변을 편집하십시오.
sepehr

부정적인 투표에도 불구하고이 답변은 실제로 저에게 도움이되었습니다.
CONvid19
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.