如果我的pandas数据框的一行包含浮点值,并且该行中的所有值都相等,那么如何从数据框中删除该行?
答案 0 :(得分:0)
使用DataFrame.nunique
测试每行唯一值的数量,使用Series.ne
通过boolean indexing
过滤出唯一行:
df1 = df[df.nunique(axis=1).ne(1)]
或者测试第一列是否相等,并根据DataFrame.any
测试每行是否至少有True
:
df1 = df[df.ne(df.iloc[:, 0], axis=0).any(axis=1)]
编辑:如果要删除具有相同值的所有行和所有列,则应更改具有loc
和axis=0
的测试列的解决方案:
df = pd.DataFrame({
'B':[4,4,4,4,4,4],
'C':[4,4,9,4,2,3],
'D':[4,4,5,7,1,0],
})
print (df)
B C D
0 4 4 4
1 4 4 4
2 4 9 5
3 4 4 7
4 4 2 1
5 4 3 0
df2 = df.loc[df.nunique(axis=1).ne(1), df.nunique(axis=0).ne(1)]
第二种解决方法:
df2 = df.loc[df.ne(df.iloc[:, 0], axis=0).any(axis=1), df.ne(df.iloc[0], axis=1).any(axis=0)]
print (df2)
C D
2 9 5
3 4 7
4 2 1
5 3 0
答案 1 :(得分:0)
您可以在每行axis=1
上使用DataFrame.diff
:
# Example dataframe:
df = pd.DataFrame({'Col1':[1,2,3],
'Col2':[2,2,5],
'Col3':[4,2,9]})
Col1 Col2 Col3
0 1 2 4
1 2 2 2 # <-- row with all same values
2 3 5 9
df[df.diff(axis=1).fillna(0).ne(0).any(axis=1)]
Col1 Col2 Col3
0 1 2 4
2 3 5 9