pandas DataFrame如何删除或替换指定列指定索引范围的数值
问题原因
你之前的写法存在两处错误:
- 同时指定了
columns=['B']参数,会直接删除整个B列,不符合只修改局部数值的需求 index参数接收的是行的索引标签,你传入的[8,9,10]是B列的数值而非行索引,无法定位到目标行
实现方案
pandas为结构化二维表格,不支持单独删除某列的部分单元格(会导致表格结构错位),如果要移除目标数值,通常替换为NaN即可,以下是两种常见实现方式:
方式1:按行索引定位(B列行索引2~4)
使用loc定位到目标区域直接赋值即可:
import pandas as pd import numpy as np # 构造示例DataFrame df = pd.DataFrame({ 'A': [1,2,3,4,5], 'B': [6,7,8,9,10], 'C': [11,12,13,14,15] }) # 替换B列行索引2到4的值为NaN df.loc[2:4, 'B'] = np.nan
运行后输出结果:
A B C 0 1 6.0 11 1 2 7.0 12 2 3 NaN 13 3 4 NaN 14 4 5 NaN 15
方式2:按目标数值匹配(值为8/9/10就替换)
如果不需要固定行索引,只要B列数值在目标列表中就替换,可以用isin匹配:
df.loc[df['B'].isin([8,9,10]), 'B'] = np.nan
运行效果和方式1完全一致。
扩展:删除对应行
如果你需要删除B列包含目标数值的整行数据,可以使用如下写法:
df = df.drop(df[df['B'].isin([8,9,10])].index)
运行后输出结果:
A B C 0 1 6 11 1 2 7 12
内容的提问来源于stack exchange,提问作者lo7
相关产品推荐
相关产品推荐

