因此,我试图循环通过dataframe并根据条件删除列,但我得到了以下错误:Keyerror:1当我使用df_X.loc[:,1]时,即使有一个名为1的列
如果我尝试使用df_X.iloc[:,i],因为所有列都以数字命名,我会得到错误Too many indexers
我很清楚这些列的名称从0到590,所以它们是数字而不是字母数字
使用loc时的代码
cols = df_X.columns
for i in range(len(cols)):
if (df_X.loc[:,i].isnull().sum())/len(df_X) > .20:
df_X.drop(i,axis=1,inplace=True)
else: df_X= df_X.loc[:,i].replace(np.nan,np.mean(df_X.loc[:,i]))
使用iloc时的代码
cols = df_X.columns
for i in range(len(cols)):
if (df_X.iloc[:,i].isnull().sum())/len(df_X) > .20:
df_X.drop(i,axis=1,inplace=True)
else: df_X= df_X.iloc[:,i].replace(np.nan,np.mean(df_X.iloc[:,i]))
3条答案
按热度按时间lfapxunr1#
我相信你遇到的问题是在df_X.loc[:,1]中使用整数而不是字符串(df_X.loc[:,'1 ']是正确的),正如巴勃罗所提到的。下面是一个例子:
uxh89sit2#
IIUC,您希望删除nan数大于20%的列,并将其他nan值替换为该列的平均值:
可重复的示例:
您的代码已修复:
eblbsuwk3#
代码的最后一行有问题
df_X[i] = df_X[i].replace(np.nan,np.mean(df_X[i]))
这改变了整个dataframe到一个列,这就是为什么我得到了太多的索引器作为一个错误。谢谢大家的帮助,我很感激。@Corralien @Eriks Markevis