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

Python 熊猫:使用iloc根据条件更改df列值,python,pandas,dataframe,Python,Pandas,Dataframe,拿一个数据帧,比如说 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相同的掩码 而 d

拿一个数据帧,比如说

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的布尔索引不可用

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

使用介于
.loc
.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
Edit
.ix
现在已被正式弃用(从0.20.0开始,请参阅)

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

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

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

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

一致认为
ix
将消失。是的,这个答案已经被弃用了(@lotrus28该答案确实包含2017年以来的弃用链接)