python– 按整数索引选择并修改pandas数据帧中的切片

python– 按整数索引选择并修改pandas数据帧中的切片,第1张

概述我有一个如下数据框:df = pd.DataFrame([[1,2],[10,20],[10,2],[1,40]],columns = ['a','b']) a b 0 1 2 1 10 20 2 10 2 3 1 40 我想选择a == 1的b列,以下是经典选择:df[df.a == 1].b a b 0

我有一个如下数据框:

df = pd.DataFrame([[1,2],[10,20],[1,40]],columns = ['a','b'])    a   b0   1   21   10  202   10  23   1   40

我想选择a == 1的b列,以下是经典选择:

df[df.a == 1].b    a   b0   1   23   1   40

然后我想选择这个子数据帧的第i行,这不是索引为i的行.还有几种方法,如下所示:

df[df.a == 1].b.iloc[[1]]Output: 3    40name: b,dtype: int64

到现在为止还挺好.问题是当我尝试修改我到达那里的值时,实际上这个选择方法会产生数据帧切片的副本,而不是对象本身.因此我无法在原地进行修改.

test[test.a == 1].b.iloc[[1]] = 3SettingWithcopyWarning:A value is trying to be set on a copy of a slice from a DataFrame

我不知道“复制”问题在哪个部分,因为以下两个产生同样的问题:

test.iloc[[3]].b = 3test[test.a == 1].b = 3

所以我的问题是这样的:如何通过掩码选择(有条件地在列值上)和行选择(通过子数据帧中的行的排名,而不是其索引值)来更改值?最佳答案使用带有布尔掩码的loc并直接传递索引:

In[178]:df.loc[df.loc[df['a'] == 1,'b'].index[1],'b'] = 3dfOut[178]:     a   b0   1   21  10  202  10   23   1   3

所以这里我们使用df [‘a’] == 1来掩盖df,这将返回一个布尔数组,我们屏蔽df并选择列’b’:

In[179]:df.loc[df['a'] == 1,'b']Out[179]: 0    23    40name: b,dtype: int64

然后直接下标索引:

In[180]:df.loc[df['a'] == 1,'b'].index[1]Out[180]: 3

然后我们可以将此索引标签传递回顶级loc.

该测试[test.a == 1] .b.iloc [[1]] = 3是chained indexing,这就是提出警告的原因. 总结

以上是内存溢出为你收集整理的python – 按整数索引选择并修改pandas数据帧中的切片全部内容,希望文章能够帮你解决python – 按整数索引选择并修改pandas数据帧中的切片所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1206208.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-04
下一篇2022-06-04

发表评论

登录后才能评论

评论列表(0条)

    保存