我有一个数据框,其中每一列代表一个用户。我试图消除任何列,只有NaN和0.000000。这样,该用户名1或第一列将不包含在数据框中,而其他用户将包含在数据框中。
这是数据框:
username 1 2 3 4 5
date
2019-01-16 NaN 9.16667 NaN NaN 1.000000
2019-01-17 NaN NaN NaN 1.000000 1.000000
2019-01-18 NaN 1.00000 0.956522 1.000000 1.000000
2019-01-19 0.000000 NaN 1.000000 NaN NaN
2019-01-20 0.000000 NaN 0.961538 NaN NaN
百分比存储为float64:
type(df['1'].iloc[0])
numpy.float64
答案 0 :(得分:5)
您可以先将0
替换为NaN
,然后删除仅包含NaNs
的列:
df.loc[:,~df.replace(0,np.nan).isna().all()]
username 2 3 4 5
0 date NaN NaN NaN NaN
1 2019-01-16 9.16667 NaN NaN 1.0
2 2019-01-17 NaN NaN 1.0 1.0
3 2019-01-18 1.00000 0.956522 1.0 1.0
4 2019-01-19 NaN 1.000000 NaN NaN
5 2019-01-20 NaN 0.961538 NaN NaN
答案 1 :(得分:2)
您可以先通过dropna
然后将{{3}}的0
值转换为NaN
:
df = df.mask(df.eq(0)).dropna(how='all', axis=1)
即使对于未删除的列,这也会将0
的值转换为NaN
。尚不清楚这是否是您想要的,但建议保持一致。