检查每个 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
我有一个 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