首页 > 解决方案 > 如果超过 3 个连续的 NaN,则删除列

问题描述

我正在尝试删除具有超过 3 个或 k 个连续 NaN 的列。熊猫新手。任何帮助表示赞赏。

数据看起来像

200  2000 7632
123  NaN  1232
98   NaN  12324
4231 NaN  673
87   76   1000

标签: pythonpython-3.xpandas

解决方案


你可以这样做:

df=pd.DataFrame()
df['col1']=[np.nan,1,2,np.nan,3,np.nan,np.nan]
df['col2']=[np.nan,np.nan,np.nan,np.nan,1,2,3]
df['col3']=[1,2,3,4,np.nan,np.nan,np.nan]
print(df)

   col1  col2  col3
0   NaN   NaN   1.0
1   1.0   NaN   2.0
2   2.0   NaN   3.0
3   NaN   NaN   4.0
4   3.0   1.0   NaN
5   NaN   2.0   NaN
6   NaN   3.0   NaN

df_filtered=df.loc[:,(df.notna().cumsum().shift().apply(lambda x: x.value_counts()).fillna(0)<3).all()]
print(df_filtered)

  col1
0   NaN
1   1.0
2   2.0
3   NaN
4   3.0
5   NaN
6   NaN

注意:如果它有 3 个或更多,这将消除,要从 4 中消除,您必须将 3 替换为 4


推荐阅读