如何最快替换DataFrame中John行的所有数值为0?
解决方案
原始数据
Name English Maths City Hdhdn 65 50 Xyz Hdhdhd 70.6 45 Abc John 67.4 46 Ydh
需求
将df1中Name为John的行的所有数值型字段值替换为0,期望结果:
Name English Maths City Hdhdn 65 50 Xyz Hdhdhd 70.6 45 Abc John 0 0 Ydh
最快实现方法
使用pandas的矢量化索引操作是效率最高的方案,底层基于C实现,避免Python级别的循环,数据量越大优势越明显:
步骤1:构造DataFrame(未初始化时执行)
import pandas as pd data = { 'Name': ['Hdhdn', 'Hdhdhd', 'John'], 'English': [65, 70.6, 67.4], 'Maths': [50, 45, 46], 'City': ['Xyz', 'Abc', 'Ydh'] } df1 = pd.DataFrame(data)
步骤2:核心替换操作
# 定位Name为John的行,筛选所有数值型列并赋值为0 df1.loc[df1['Name'] == 'John', df1.select_dtypes(include=['number']).columns] = 0
代码说明
df1['Name'] == 'John':通过布尔索引精准定位目标行df1.select_dtypes(include=['number']):自动筛选所有数值类型的列(int、float等),无需手动指定列名,通用性强.loc:基于标签的索引,直接对目标区域赋值,是pandas中效率最高的修改方式之一
若已明确数值列名称,也可直接指定列名,效率相当但通用性稍弱:
df1.loc[df1['Name'] == 'John', ['English', 'Maths']] = 0
验证结果
执行后打印df1即可得到期望输出。
内容的提问来源于stack exchange,提问作者MDJ
相关产品推荐
相关产品推荐

