当所有单元格为零或 nan 时删除所有行
drop all rows when all cells are either zero or nan
当该行的每一列中的所有单元格都为 0 或 'nan' 时,我需要从数据框中删除所有行(ID 列除外,它将是一些唯一值)
我试过下面的命令但没有运气。
预期的输出也粘贴在下面。
提前致谢!
数据
df = pd.DataFrame({'id':[1,2,3,4],'a':[0,0,0,1], 'b':[0,1,'nan',1], 'c':['nan',1,0,1]})
id a b c
0 1 0 0 nan
1 2 0 1 1
2 3 0 nan 0
3 4 1 1 1
命令
df.loc[df[(df != 0) & (df != ('nan'))].all(axis=1)]
预期输出
id a b c
0 2 0 1 1
1 4 1 1 1
您的解决方案应更改为 select 所有列而不是第一个 DataFrame.all
:
df1 = df.iloc[:, 1:]
df2 = df[(df1 != 0).all(axis=1) | (df1 != 'nan').all(axis=1)]
像DataFrame.isin
一样工作:
df2 = df[~df.iloc[:, 1:].isin([0, 'nan']).all(axis=1)]
如果 NaN
缺少值,则需要通过 DataFrame.notna
:
测试它们
df1 = df.iloc[:, 1:]
df2 = df[(df1 != 0).all(axis=1) | df1.notna().all(axis=1)]
或:
df2 = df[~df.iloc[:, 1:].fillna('nan').isin([0, 'nan']).all(axis=1)]
使用您展示的示例,请尝试执行以下操作。使用 Pandas.
的 drop
, isin
函数
df[~df.drop('id', 1).isin([0,'nan']).all(1)]
输出如下:
id a b c
1 2 0 1 1
3 4 1 1 1
解释:
df.drop('id', 1).isin([0,'nan']).all(1)
:使用 drop
函数在轴 1 处放置以放置列 id,然后检查其值是否存在于 0 或 nan 中,然后使用 all
检查是否所有值都是TRUE 然后给出 true.
- 然后使用
~
反转上述掩码的输出以获得 DataFrame 的预期输出。
当该行的每一列中的所有单元格都为 0 或 'nan' 时,我需要从数据框中删除所有行(ID 列除外,它将是一些唯一值) 我试过下面的命令但没有运气。 预期的输出也粘贴在下面。 提前致谢!
数据
df = pd.DataFrame({'id':[1,2,3,4],'a':[0,0,0,1], 'b':[0,1,'nan',1], 'c':['nan',1,0,1]})
id a b c
0 1 0 0 nan
1 2 0 1 1
2 3 0 nan 0
3 4 1 1 1
命令
df.loc[df[(df != 0) & (df != ('nan'))].all(axis=1)]
预期输出
id a b c
0 2 0 1 1
1 4 1 1 1
您的解决方案应更改为 select 所有列而不是第一个 DataFrame.all
:
df1 = df.iloc[:, 1:]
df2 = df[(df1 != 0).all(axis=1) | (df1 != 'nan').all(axis=1)]
像DataFrame.isin
一样工作:
df2 = df[~df.iloc[:, 1:].isin([0, 'nan']).all(axis=1)]
如果 NaN
缺少值,则需要通过 DataFrame.notna
:
df1 = df.iloc[:, 1:]
df2 = df[(df1 != 0).all(axis=1) | df1.notna().all(axis=1)]
或:
df2 = df[~df.iloc[:, 1:].fillna('nan').isin([0, 'nan']).all(axis=1)]
使用您展示的示例,请尝试执行以下操作。使用 Pandas.
的drop
, isin
函数
df[~df.drop('id', 1).isin([0,'nan']).all(1)]
输出如下:
id a b c
1 2 0 1 1
3 4 1 1 1
解释:
df.drop('id', 1).isin([0,'nan']).all(1)
:使用drop
函数在轴 1 处放置以放置列 id,然后检查其值是否存在于 0 或 nan 中,然后使用all
检查是否所有值都是TRUE 然后给出 true.- 然后使用
~
反转上述掩码的输出以获得 DataFrame 的预期输出。