如何筛选包含'';孤立的'';python中列中的nan值
我在pandas数据框中有一列,其中一些行具有NaN值 我想选择满足这些条件的行:如何筛选包含'';孤立的'';python中列中的nan值,python,pandas,filter,nan,Python,Pandas,Filter,Nan,我在pandas数据框中有一列,其中一些行具有NaN值 我想选择满足这些条件的行: -它们是价值观 -它们直接跟在非空值后面或前面 例如,我想选择具有此nan值的行: 输入: 索引| Col … 1| 1344 2|NaN 3| 532 … 所需输出: 2|NaN 但我不想选择这些nan值(因为它们后面跟一个nan值,或者紧跟在另一个nan值之后): 索引| Col … 1| 1344 2|NaN 3|NaN 4| 532 … 任何帮助都将不胜感激 谢谢大家! 下面我用一个例子向您展示了如何实现
-它们是价值观
-它们直接跟在非空值后面或前面
例如,我想选择具有此nan值的行:
输入:
索引| Col
…
1| 1344
2|NaN
3| 532
…
所需输出:
2|NaN
但我不想选择这些nan值(因为它们后面跟一个nan值,或者紧跟在另一个nan值之后): 索引| Col
…
1| 1344
2|NaN
3|NaN
4| 532
…
任何帮助都将不胜感激
谢谢大家! 下面我用一个例子向您展示了如何实现这一点。一方面,++用于对连续的
NaN
值进行分组通过使用transform
可以在具有多个NaN
的组中得到一个布尔序列,其中False
。此布尔级数的和
运算,其结果为df2['col2']。isna()
是我们正在寻找的系列,用于执行和选择存在NaN但不连续的行
df=pd.DataFrame({'col1':[1,2,3,4,5,6,7,8,9,10],'col2':[np.nan,2,3,np.nan,np.nan,6,np.nan,8,9,np.nan]})
print(df)
col1 col2
0 1 NaN
1 2 2.0
2 3 3.0
3 4 NaN
4 5 NaN
5 6 6.0
6 7 NaN
7 8 8.0
8 9 9.0
9 10 NaN
在您显示的数据框中,没有连续的NAN,您能否创建一个数据框,我们可以使用它了解您想要什么,并说明此数据框的预期输出是什么?我刚刚编辑了它!请检查我的解决方案,并考虑接受我的解决方案的工作:)非常感谢!
mask_repeat_NaN=df.groupby(df['col2'].notna().cumsum())['col2'].transform('size').le(2)
mask=mask_repeat_NaN&df['col2'].isna()
df_filtered=df[mask]
print(df_filtered)
col1 col2
0 1 NaN
6 7 NaN
9 10 NaN