2017-01-24 3 views
0

Есть ли быстрый способ автоматического генерации нулевого процента для каждого столбца и вывода в виде таблицы?Подсчет нуля в процентах

например, если столбец имеет 40 строк, с 10 нулевыми значениями, то это будет 10/40

я использую следующий код, но теперь работать (не показаны) значения: enter image description here

+0

'' mean' имеет skipna' парам но если столбец имеет 'NaN' то возвращаемый результат будет' NaN', это имеет смысл установите 'NaN' на' 0' в этом случае, так называя 'fillna (0)' first so 'df [col] .fillna (0) .mean()' – EdChum

+0

Вы пытались 'df.mean (axis = 1, skipna = False) '? или 'df.fillna (0) .mean (axis = 1)'? – EdChum

+0

@ Ednum, но это вычислило бы средние значения в ячейке? – william007

ответ

1

IIUC затем вы можете использовать isnull с sum, а затем разделить на количество строк:

In [12]: 
df = pd.DataFrame({'a':[1,2,np.NaN,np.NaN,5], 'b':[np.NaN,1,np.NaN,np.NaN,np.NaN]}) 
df 

Out[12]: 
    a b 
0 1.0 NaN 
1 2.0 1.0 
2 NaN NaN 
3 NaN NaN 
4 5.0 NaN 

In [14]:  
df.isnull().sum()/df.shape[0] 

Out[14]: 
a 0.4 
b 0.8 
dtype: float64 
2

вы можете использовать df.count()

In [56]: df 
Out[56]: 
    a b 
0 1.0 NaN 
1 2.0 1.0 
2 NaN NaN 
3 NaN NaN 
4 5.0 NaN 

In [57]: 1 - df.count()/len(df.index) 
Out[57]: 
a 0.4 
b 0.8 
dtype: float64 

тайминги, count прилично быстрее, чем isnull.sum()

In [68]: df.shape 
Out[68]: (50000, 2) 

In [69]: %timeit 1 - df.count()/len(df.index) 
1000 loops, best of 3: 542 µs per loop 

In [70]: %timeit df.isnull().sum()/df.shape[0] 
100 loops, best of 3: 2.87 ms per loop 
Смежные вопросы