pandas中对DataFrame衍生Series调用drop()未改动原表的原因咨询
代码无改动的核心原因
你这次操作没有改动原DataFrame,本质是操作对象错位,修改根本没有作用到原DataFrame实例上,最终连修改过的对象本身都没有被持久保存。
具体执行逻辑拆解
- 代码中
df.Brand的返回值,是从原DataFrame中抽取Brand列生成的独立Series对象,并非原DataFrame本身。 - 你写的
df.Brand.drop(axis=0, index=0, inplace=True),整个执行链路完全没有触达原DataFrame:- 首先临时生成一个指向Brand列值的Series,包含4个品牌值,索引为0、1、2、3
- 对这个临时Series执行drop逻辑,删除索引为0的条目,通过
inplace=True把这个Series自身的内容修改为去掉第一个值的状态 - 这个被修改的Series没有被赋值给任何变量,也没有被回写到原DataFrame的对应列位置,执行完这行代码后就会被系统回收,整个过程里原df根本没被碰过
- 因为原DataFrame从头到尾没有被执行过任何修改操作,所以两次print输出的df内容完全一致,没有任何行被丢弃。
补充边界说明
- 如果要实现删除原DataFrame索引为0的行的效果,操作对象必须是df本身,直接调用
df.drop(index=0, inplace=True),此时修改才会直接作用在原DataFrame上。 - 就算你想通过修改Brand列间接改动DataFrame,也必须把修改后的Series重新赋值回原列,示例代码如下:
这种操作也只会把Brand列对应索引位置改成空值,不会真的减少DataFrame的总行数,因为单独修改列值不会改变DataFrame的结构维度。modified_brand = df.Brand.drop(index=0) df['Brand'] = modified_brand
内容的提问来源于stack exchange,提问作者Hari Upadrasta
相关产品推荐
相关产品推荐

