Pandas:根据iloc的条件更改df列值

时间:2016-12-15 21:41:53

标签: python pandas dataframe

采用数据框,说白

$recent_posts = wp_get_recent_posts( array( 'numberposts' => '1' ) );
echo $recent_posts[0]['post_date'];

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

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上以某种方式返回此错误:

  

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

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

2 个答案:

答案 0 :(得分:3)

使用.loc.iloc之间的DataFrame.ix

  

.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开始,请参阅here

您可以使用.loc并使用df.columns[i]代替,例如。与上述相同的是:

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

答案 1 :(得分:0)

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

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

enter image description here