如何调用变量中所有唯一值以简化代码?
我有一个数据集。一开始,我想检查一下所有有缺失值的列(比如死亡率、死亡人数、发病率和艾滋病病例)的正常性。我尝试用这段代码(df3是这个数据集的框架):
from scipy.stats import shapiro
norm_dr= shapiro(df3["AIDS_Death_Rate"].dropna())
norm_d= shapiro(df3["AIDS_Death"].dropna())
norm_inc= shapiro(df3["HIV_Incidence_Rate"].dropna())
norm_nc= shapiro(df3["New_HIV_Cases"].dropna())
print("normality for aids death rate: ", norm_dr,
"normality for aids death: ", norm_d,
"normality for incidence: ", norm_inc,
"normality for new cases: ", norm_nc)
虽然这段代码运行得很好,但我觉得写下所有列名真是太费劲了。这些列是顺序排列在一起的,所以我想我可以试试这样的写法:
norm= shaphiro (df3[3:6).dropna())
print(norm)
但是没有成功。
2 个回答
0
你可以像这样遍历列
norm = {}
for k in df3.columns[3:7]:
norm[k] = shaphiro(df3[k].dropna())
2
你可以用一种叫做列表推导的方法,来创建一个你想检查正态性的列名列表,然后通过这个列表逐个调用shapiro函数来检查每一列。下面是具体的做法:
from scipy.stats import shapiro
cols_to_check = ["AIDS_Death_Rate", "AIDS_Death", "HIV_Incidence_Rate", "New_HIV_Cases"]
normality_results = []
for col in cols_to_check:
normality_results.append(shapiro(df3[col].dropna()))
for col, result in zip(cols_to_check, normality_results):
print(f"Normality for {col}: {result}")
如果你想用更简洁的方式来实现这个,而不需要逐个列出所有的列名,你可以利用DataFrame的columns属性来获取所有列名的列表,然后根据一些条件筛选出你想要的列。下面是具体的做法:
from scipy.stats import shapiro
cols_with_missing = [col for col in df3.columns if df3[col].isnull().any()]
normality_results = []
for col in cols_with_missing:
normality_results.append(shapiro(df3[col].dropna()))
for col, result in zip(cols_with_missing, normality_results):
print(f"Normality for {col}: {result}")
这种方法可以动态地识别出有缺失值的列,并对这些列进行正态性测试,而不需要你手动列出列名。如果你已经知道需要进行标准化的列,可以相应地设置cols_to_check
。比如,cols_to_check = df3.columns[2:6]