代码中的.ix替代品

时间:2018-06-06 17:02:38

标签: python pandas

我想运行一个代码来检查其中发生了什么,但我无法执行此操作,有一条消息说.ix已被弃用。

outlier = 4 #outlier

for k in np.arange(0,3,1):

    wAvg = sum(df.ix[:,1] * df.ix[:,2]) #Weight Average
    Std = df.ix[:,2].std()
    df.ix[:,2] = (df.ix[:,2]-wAvg)/Std

    df.ix[df.ix[:,2] > outlier,  2] =  outlier
    df.ix[df.ix[:,2] < -outlier, 2] = -outlier

我是python的新手,我只想了解逻辑,以便为此创建一个文档。我怎样才能做到这一点。

1 个答案:

答案 0 :(得分:2)

看起来需要按位置编制索引,因此请将ix更改为iloc

因此,对于第一行需要更改:

wAvg = sum(df.ix[:,1] * df.ix[:,2])

为:

wAvg = sum(df.iloc[:,1] * df.iloc[:,2])

boolean indexing需要loc进行过滤,并按df.columns[2]索引选择列名:

df.ix[df.ix[:,2] > outlier,  2] =  outlier
df.ix[df.ix[:,2] < -outlier, 2] = -outlier

为:

df.loc[df.iloc[:,2] > outlier,  df.columns[2]] =  outlier
df.loc[df.iloc[:,2] < -outlier, df.columns[2]] = -outlier

有关详细信息,请查看pandas docs

编辑:

for k in np.arange(0,3,1):

    wAvg = sum(df.iloc[:,1] * df.iloc[:,2]) #Weight Average
    Std = df.iloc[:,2].std()
    df.iloc[:,2] = (df.iloc[:,2]-wAvg)/Std

    df.loc[df.iloc[:,2] > outlier,  df.columns[2]] =  outlier
    df.loc[df.iloc[:,2] < -outlier,df.columns[2]] = -outlier