我有一个 Pandas DataFrame 数据,其中给定列中的所有行都必须匹配:
df = pd.DataFrame({'A': [1,1,1,1,1,1,1,1,1,1],
'B': [2,2,2,2,2,2,2,2,2,2],
'C': [3,3,3,3,3,3,3,3,3,3],
'D': [4,4,4,4,4,4,4,4,4,4],
'E': [5,5,5,5,5,5,5,5,5,5]})
In [10]: df
Out[10]:
A B C D E
0 1 2 3 4 5
1 1 2 3 4 5
2 1 2 3 4 5
...
6 1 2 3 4 5
7 1 2 3 4 5
8 1 2 3 4 5
9 1 2 3 4 5
我想要一种快速了解 DataFrame 中是否存在差异的方法。此时,我不需要知道哪些值发生了变化,因为我稍后会处理这些值。我只需要一种快速的方法来了解 DataFrame 是否需要进一步关注,或者我是否可以忽略它并继续下一个。
我可以使用检查任何给定的列
(df.loc[:,'A'] != df.loc[0,'A']).any()
但我对 Pandas 的了解限制了我对列进行迭代(我知道迭代在 Pandas 中是不受欢迎的)来比较所有列:
A B C D E
0 1 2 3 4 5
1 1 2 9 4 5
2 1 2 3 4 5
...
6 1 2 3 4 5
7 1 2 3 4 5
8 1 2 3 4 5
9 1 2 3 4 5
for col in df.columns:
if (df.loc[:,col] != df.loc[0,col]).any():
print("Found a fail in col %s" % col)
break
Out: Found a fail in col C
如果数据框的任何列中的任何行与列中的所有值不匹配,是否有一种优雅的方法返回 bool 值......可能没有迭代?
最佳答案
给定您的示例数据框:
df = pd.DataFrame({'A': [1,1,1,1,1,1,1,1,1,1],
'B': [2,2,2,2,2,2,2,2,2,2],
'C': [3,3,3,3,3,3,3,3,3,3],
'D': [4,4,4,4,4,4,4,4,4,4],
'E': [5,5,5,5,5,5,5,5,5,5]})
您可以使用以下内容:
df.apply(pd.Series.nunique) > 1
这给了你:
A False
B False
C False
D False
E False
dtype: bool
如果我们然后强制出现几个错误:
df.loc[3, 'C'] = 0
df.loc[5, 'B'] = 20
然后你得到:
A False
B True
C True
D False
E False
dtype: bool
关于python - 对于所有列,给定列中的所有行都必须匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38648940/