DataFrame的subset要改变只能赋值这一条路吗?

fillna()的inplace=True参数只有在Series和DataFrame中起作用。

但是通过loc,iloc和【】选出来的subset只是一个新的DataFrame,改变它不会改变原DataFrame,除非这个subset是一个Series,那么Series.fillna(0,inplace=True),那么就会立竿见影的改变原来的DataFrame里同样位置的数据。

如果你想的通过loc,iloc和【】选出来的subset来改变原DataFrame,似乎只剩一种办法。就是赋值法如:

fd=pd.DataFrame(。。。。。)

fd1=fd.loc[[a,b],:]

fd1.fillna(0,inplace=True)
fd.loc[[a,b],:]=fd1

目前似乎也只有通过先改变f1这个subset,再赋值给他的原DataFrame,来改变DataFrame,不知道有没有其他好办法,不用这么倒腾。

目前我认为之所以可以通过Series的fillna(0,inplace=True)来改变原函数,而subset却只能改变subset它自己的原因是,Series用的是原DataFrame的地址,所以原DataFrame会随Series的变化而变化。

但是原DataFrame通过方法筛选出来的subset,它自身就是一个DataFrame类型,就算数据一样,也只能是另一个不同地址的DataFrame(也可以认为是一个新的DataFrame,完全和原DataFrame没有任何关系),所以想改变原DataFrame,就只能通过赋值法了

打个不恰当的比方,可以用二维的list来类比

a=[[1,2],[3,4]]

改变a[0]的值a就会跟

a[0]=100

a就变成了[[100,2],[3,4]]

但是b=[ [ a[1][1],a[0][0] ],[ a[0][1],a[1][0] ] ]

这个b不管怎么变都不会影响a,想要反过来影响a只有赋值法了

我觉得这个理解肯定哪里出错了,如果有高手发现请斧正!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值