Pandas删除DataFrame指定索引行无输出结果问题咨询
问题原因
- 第一,你对
drop方法的返回值逻辑理解错了:pandas默认不会修改原对象,所有变更类方法默认返回新对象,你执行df2.drop(index=x)后既没有赋值给新变量,也没有直接打印语句,自然看不到输出。 - 第二,数据集拆分逻辑错误:你当前的
df2本身就是筛选出EU_Sales包含K/M的数据集,即便你在df2上删除部分行,得到的依然是含K/M的子集,不可能得到仅含数字的数据集。 - 第三,索引对应逻辑错误:你手动整理的
x列表是原df_01的全局行索引,这些索引大部分不存在于筛选后的df2中,删除操作本身也无法命中目标行。
正确解决办法
不需要手动整理索引列表,直接用布尔索引的取反逻辑就能快速拆分两类数据集,代码更简洁也不会出错:
# 筛选EU_Sales含K/M的数据集 df_with_unit = df_01[df_01['EU_Sales'].str.contains('K|M', na=False)] # 用~符号对布尔条件取反,直接筛选出EU_Sales仅含数字的数据集 df_only_number = df_01[~df_01['EU_Sales'].str.contains('K|M', na=False)]
参数na=False用于处理EU_Sales为空值的场景,避免匹配时报错。
如果你坚持用drop方法实现,正确写法如下:
# 先拿到所有需要删除的(含K/M的)行的索引 drop_idx = df_01[df_01['EU_Sales'].str.contains('K|M', na=False)].index # 在df_01上删除目标行,赋值给新变量得到纯数字数据集 df_only_number = df_01.drop(index=drop_idx)
内容的提问来源于stack exchange,提问作者박진영
相关产品推荐
相关产品推荐

