2016-08-15 75 views
1

我在大型數據框上使用熊貓0.18.1。我對value_counts()的行爲感到困惑。這是我的代碼:爲什麼value_counts不顯示所有值?

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) 

此打印如下:

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

兩個問題:

  • 爲什麼nan印刷爲一體的normalise_phase輸出,當nan 沒有被列爲value_counts的值?
  • 爲什麼value_counts顯示dtype作爲int64如果有字符串值就像它 1/2nan嗎?

回答

3

您需要通過dropna=False才能計算NaN(請參閱docs)。 int64是系列的dtype(值的計數)。這些值本身就是索引。如果您檢查,索引的dtype將是對象。

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

@Richard在基本操作中,熊貓的默認行爲是忽略NaN(例如,當取得和時,numpy在這種情況下返回nan)。我想在value_counts NaNs被放棄是一致的,但我同意,當我第一次意識到這一點時,我很驚訝。 – ayhan

相關問題