检查每个 pandas DataFrame 单元格的条件

Check condition on each pandas DataFrame cell

我有一个 pandas DataFrame corr,它收集 2k 个变量之间的相关性。由于我没有创建它,所以我想检查它是否满足相关矩阵的通常一致性属性(simmetry,[-1,1]中的所有数值,没有缺失值,...)。由于我的实际代码涉及两个嵌套循环,我该如何有效地检查这些条件?

为了完整起见,我在下面生成了一个 df,其中包含我实际检查的示例。

import pandas as pd 
df = pd.DataFrame(np.random.normal(size=(10000,2000)), columns = ["var"+str(i) for i in range(0,2000)])
corr = df.corr()

inconsistent_cells=[]
for row in corr.index:
      for col in corr.columns:
                value = corr.loc[row,col]
                if not isinstance(value,float) or (value<-1 or value>1):
                    inconsistent_cells.append((value, (row,col)))

我认为一种可能的解决方案是使用 itertuples(),但这样我会丢失有关单元格坐标的信息。 apply().

也是如此

如有任何建议,不胜感激。

编写一个自定义函数来检查:

def check_df(df):
    #symmetry
    if not df.eq(df.T).all().all():
        return False
    #between -1 and 1
    if not df.apply(lambda x: x.between(-1,1,inclusive="both").all()).all():
        return False
    #null values
    if df.isnull().any().any():
        return False
    return True