我認爲你需要notnull
爲檢查NaN
,然後檢查0
昂返回所有True
由all
。最後使用loc
與boolean indexing
:
mask = (df.notnull() & (df != 0)).all()
print (df.loc[:, mask])
樣品:
x = pd.DataFrame({'A':[1,0,0],
'B':[4,np.nan,6],
'C':[7,8,9]})
print (x)
A B C
0 1 4.0 7
1 0 NaN 8
2 0 6.0 9
print (x.notnull() & (x != 0))
A B C
0 True True True
1 False False True
2 False True True
print ((x.notnull() & (x != 0)).all())
A False
B False
C True
dtype: bool
mask = (x.notnull() & (x != 0)).all()
print (x.loc[:, mask])
C
0 7
1 8
2 9
編輯:
如果x
是Series
使用:
x = pd.Series([np.nan, 1, 0, 0, 5, np.nan])
print (x)
0 NaN
1 1.0
2 0.0
3 0.0
4 5.0
5 NaN
dtype: float64
print (x[x.notnull() & (x != 0)])
1 1.0
4 5.0
dtype: float64
EDIT1:
x = pd.Series([np.nan, 3.809518, 7.031835000000001, 20.190089999999998, 21.217053, 20.806],
index=['var_1', 'var_2', 'var_5', 'var_10', 'var_20', 'var_30'])
print (x)
var_1 NaN
var_2 3.809518
var_5 7.031835
var_10 20.190090
var_20 21.217053
var_30 20.806000
dtype: float64
print (x.notnull() & (x != 0))
var_1 False
var_2 True
var_5 True
var_10 True
var_20 True
var_30 True
dtype: bool
print (x[x.notnull() & (x != 0)])
var_2 3.809518
var_5 7.031835
var_10 20.190090
var_20 21.217053
var_30 20.806000
Name: 1, dtype: float64
在函數輸出中嘗試了您的代碼,並且收到錯誤消息:索引器太多 – kynnem
什麼是x.info()? – jezrael
x.info()返回錯誤。類型(x)是一個pandas.core.series.Series – kynnem