如果我有一个panda Dataframe ,其中有一行包含浮点值,并且该行中的所有值都相等,如何从 Dataframe 中删除该行?
juud5qan1#
使用DataFrame.nunique测试每行唯一值的数量,使用Series.ne通过boolean indexing筛选出唯一行:
DataFrame.nunique
Series.ne
boolean indexing
df1 = df[df.nunique(axis=1).ne(1)]
或者,如果不等于第一列,则进行测试,并且通过DataFrame.any测试每行是否至少有一个True:
DataFrame.any
True
df1 = df[df.ne(df.iloc[:, 0], axis=0).any(axis=1)]
如果要删除具有相同值的所有行和所有列,则应更改具有loc和axis=0的测试列的解决方案:
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)]
对于第二种解决方案:一个三个三个一个
mcvgt66p2#
可以使用DataFrame.diff而不是axis=1(每行):
DataFrame.diff
axis=1
# 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
2条答案
按热度按时间juud5qan1#
使用
DataFrame.nunique
测试每行唯一值的数量,使用Series.ne
通过boolean indexing
筛选出唯一行:或者,如果不等于第一列,则进行测试,并且通过
DataFrame.any
测试每行是否至少有一个True
:如果要删除具有相同值的所有行和所有列,则应更改具有
loc
和axis=0
的测试列的解决方案:对于第二种解决方案:
一个三个三个一个
mcvgt66p2#
可以使用
DataFrame.diff
而不是axis=1
(每行):