如何基于字典和索引高效替换Pandas DataFrame文本值
基于指定列值批量替换DataFrame中对应文本的高效方法
问题背景
现有包含Order和Text两列的数据集,需要根据Order列的特定值,批量替换对应行的Text内容。原使用apply的方法在216行数据上运行耗时过长,尝试基于索引的字典替换时因Series无put属性报错,需寻求高效实现方案。
示例初始数据:
import pandas as pd import numpy as np df = pd.DataFrame({ 'Order': ['OrderF14-47', 'OrderF13-43', 'OrderF15-50'], 'Text': ['disclose the information', 'confirm withhold s. 88', 'initial notice']})
高效解决方案
方法1:使用loc直接定位替换
通过loc筛选出Order匹配字典键的行,直接赋值新的Text内容,是最直观高效的方式:
# 定义替换规则字典:key为Order值,value为要替换的Text内容 replace_dict = { 'OrderF14-47': 'disclose under s. 22.', 'OrderF15-50': 'updated initial notice' } # 遍历字典,批量替换 for order_val, new_text in replace_dict.items(): df.loc[df['Order'] == order_val, 'Text'] = new_text print(df)
输出结果:
Order Text 0 OrderF14-47 disclose under s. 22. 1 OrderF13-43 confirm withhold s. 88 2 OrderF15-50 updated initial notice
方法2:将Order设为索引后用replace更新
把Order设为DataFrame的索引后,可直接利用replace方法针对索引匹配替换:
df_indexed = df.set_index('Order') replace_dict = { 'OrderF14-47': 'disclose under s. 22.', 'OrderF15-50': 'updated initial notice' } # 针对索引匹配替换Text列 df_indexed['Text'] = df_indexed['Text'].replace(replace_dict) # 还原索引(可选) df_updated = df_indexed.reset_index() print(df_updated)
方法3:使用update方法批量更新
update方法可直接用字典匹配索引进行批量更新,效率更高:
# 先将Order设为索引 df_indexed = df.set_index('Order') replace_dict = { 'OrderF14-47': 'disclose under s. 22.', 'OrderF15-50': 'updated initial notice' } # 将字典转为Series,匹配索引更新 df_indexed['Text'].update(pd.Series(replace_dict)) df_updated = df_indexed.reset_index() print(df_updated)
原方法报错原因
原代码中df['Text'].put(di.keys(), di.values())报错是因为**Series对象没有put方法**,put是numpy数组的专属方法,即便转为数组使用,也不如上述Pandas原生方法直观高效。
内容的提问来源于stack exchange,提问作者oymonk
相关产品推荐
相关产品推荐

