2016-08-15 2 views
1

큰 데이터 프레임에서 팬더 0.18.1을 사용하고 있습니다. 나는 value_counts()의 행동에 혼란 스럽다.value_counts가 모든 값을 표시하지 않는 이유는 무엇입니까?

2  35092 
3  26248 
1  24646 
4  22189 
1/2  8295 
2/3  4219 
0  1829 
dtype: int64 
1 
nan 

두 질문 : 그러면 다음 인쇄

print df.phase.value_counts() 
def normalise_phase(x): 
    print x 
    return int(str(x).split('/')[0]) 
df['phase_normalised'] = df['phase'].apply(normalise_phase) 

: 이것은 내 코드입니다

nan 은 다음과 같이 나열되지 않은 normalise_phase의 출력으로 nan 인쇄 왜
  • , value_counts의 값?
  • value_counts는 너무 그것에 1/2nan 같은 문자열 값이있는 경우 int64dtype가 표시되는 이유는 무엇입니까?

답변

3

NaN을 집계하려면 dropna=False을 전달해야합니다 (docs 참조). int64은 계열의 dtype입니다 (값의 수). 값 자체가 색인입니다. 확인하면 인덱스의 dtype이 object가됩니다.

ser = pd.Series([1, '1/2', '1/2', 3, np.nan, 5]) 

ser.value_counts(dropna=False) 
Out: 
1/2 2 
5  1 
3  1 
1  1 
NaN 1 
dtype: int64 

ser.value_counts(dropna=False).index 
Out: Index(['1/2', 5, 3, 1, nan], dtype='object') 
+0

감사합니다. 나는'value_counts'가'NaN' 값을 떨어 뜨렸다는 것을 전혀 모릅니다. – Richard

+0

@ 리차드 기본 작업에서 팬더의 기본 동작은 NaN을 무시하는 것입니다 (예 : 합계를 취할 때 numpy는이 경우에 nan을 반환 함). 나는 value_counts에서 NaN이 일관성있게 떨어 졌다고 생각하지만 동의합니다. 처음 깨달았을 때 놀랐습니다. – ayhan

관련 문제