繁体   English   中英

熊猫:使用iloc根据条件更改df列值

[英]Pandas: Change df column values based on condition with iloc

说一个数据框

df = pd.DataFrame([[1,2],[3,4],[5,6]],columns=['A','B'])

   A  B
0  1  2
1  3  4
2  5  6

现在,我想更改第一列中的单元格。
我可以这样:

df.loc[df['A'] > 1,'A'] = 10

    A  B
0   1  2
1  10  4
2  10  6

但是,如果我没有任何列名怎么办?
df.iloc[:,0] > 1给我与df['A'] > 1相同的掩码
而而

df.loc[df.iloc[:,0] > 1,'A'] = 10

效果很好,

运用

df.iloc[df.iloc[:,0] > 1,1] = 10

在初始df上以某种方式返回此错误:

NotImplementedError:基于整数类型的基于iLocation的布尔索引不可用

有没有办法仅使用整数索引来更改特定单元格?

使用DataFrame.ix ,它是.loc.iloc之间的混合.iloc

.ix []支持基于整数和标签的混合访问。 它主要基于标签,但是将退回到整数位置访问,除非相应的轴是整数类型。

在您的情况下:

In [1]: df.ix[df.iloc[:,0]>1,1] =  10

In [2]: df
Out[2]: 
   A   B
0  1   2
1  3  10
2  5  10

编辑.ix现在已正式弃用(自0.20.0起,请参见此处

您可以使用.loc并改用df.columns[i] ,例如。 与上述等效的是:

df.loc[df.iloc[:,0]>1,df.columns[1]] =  10

通过使用布尔掩码对np.arange(len(df))进行切片np.arange(len(df))生成位置索引。

df.iloc[np.arange(len(df))[df.values[:, 0] > 1], 0] = 10
df

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM