2016-12-08 9 views
1

문자열 유형 (객체) 열이있는 일반 DataFrame이 있습니다. WHERE 절과 동등한 것을 사용하여 열을 필터링하려고하면 점 표기법을 사용할 때 KeyError이 표시됩니다. 대괄호 표기법을 사용하면 모든 것이 잘됩니다.pandas dataframe where 대괄호 대 열 선택

나는이 지시 사항을 참조하여 오전 :

df[df.colA == 'blah'] 
df[df['colA'] == 'blah'] 

첫 번째는 내가의 목적을 위해 만들어진 맞춤형 DataFrame에 문제를 재현 할 수 없기 때문에 예를 게시하지

KeyError: False

의 동등 제공 그림 : 내가 할 때, 두 표기법은 같은 결과를 산출합니다.

두 가지에 차이가 있는지, 왜 그런지 묻는다면.

+1

내가 강하게 당신이 당신의 열을 액세스 할 점 표기법보다는 대괄호를 사용하는 습관을 조언는 점 표기법은 안양의 속성을 액세스하고 최고 수준의 특성을 찾아 볼 것입니다 메소드가 먼저 있고, 다음에 컬럼이있는 경우. 그것은 매우 오류가 발생하기 쉽고 이상한 오류가 발생할 수 있습니다. – EdChum

답변

3

점 표기법은 표준 브라켓 대 물건에 액세스하기위한 편리한 바로 가기입니다. 특히, 열 이름이 이미 DataFrame 메서드 인 sum과 같은 경우에는 작동하지 않습니다. 내 예제는 실제 예제의 열 이름이 해당 문제로 실행되고 브래킷 선택에 문제가 없지만 메서드가 'blah'과 같은지 여부를 테스트합니다. 아래

빠른 예 :

In [67]: df = pd.DataFrame(np.arange(10).reshape(5,2), columns=["number", "sum"]) 

In [68]: df 
Out[68]: 
    number sum 
0  0 1 
1  2 3 
2  4 5 
3  6 7 
4  8 9 

In [69]: df.number == 0 
Out[69]: 
0  True 
1 False 
2 False 
3 False 
4 False 
Name: number, dtype: bool 

In [70]: df.sum == 0 
Out[70]: False 

In [71]: df['sum'] == 0 
Out[71]: 
0 False 
1 False 
2 False 
3 False 
4 False 
Name: sum, dtype: bool 
+0

스폿이 켜지면 열이 '크기'라고합니다. –