如何替换Pandas DataFrame中的完整对象?及批量统一DataFrame车辆类型字段值的技术咨询
回答你的两个问题
1. 替换Pandas DataFrame中完整对象的方法
当然有!分两种场景给你说明:
- 如果是想替换整个DataFrame对象(比如把当前的
dft换成另一个完全不同的DataFrame),直接赋值就可以:# 假设new_df是你准备好的新DataFrame dft = new_df - 如果是替换DataFrame中某列的完整单元格值(比如把列里所有等于"OLD_VALUE"的单元格换成新值),可以用
replace()做精确匹配:# 单值替换 dft['COLUMN_NAME'] = dft['COLUMN_NAME'].replace("OLD_VALUE", "NEW_VALUE") # 批量多值替换,用字典映射 replace_map = {"VALUE_A": "NEW_A", "VALUE_B": "NEW_B"} dft['COLUMN_NAME'] = dft['COLUMN_NAME'].replace(replace_map)
2. 批量替换包含特定关键词的车辆类型
从你的描述来看,你之前的问题出在:str.replace(r'truck', 'TRUCK')只会替换字段里的"truck"子串,而不是把整个包含truck的字段值换成"TRUCK"——比如"BOX TRUCK"里的"TRUCK"本来就是大写,替换后自然没变化。
给你两个针对性的解决方案:
方案一:筛选匹配行后直接赋值(最直观)
先找出所有包含truck(不区分大小写)的行,然后把这些行的VEHICLE_TYPE统一设为"TRUCK":
import pandas as pd import re # 生成匹配掩码:不区分大小写检查字段是否包含truck mask = dft['VEHICLE_TYPE'].str.contains(r'truck', regex=True, flags=re.IGNORECASE) # 给匹配到的行赋值 dft.loc[mask, 'VEHICLE_TYPE'] = 'TRUCK'
方案二:正则匹配整个字段替换(更灵活)
用正则表达式匹配整个字段,只要字段里包含truck(不管前后有什么内容),就把整个字段替换成"TRUCK":
dft['VEHICLE_TYPE'] = dft['VEHICLE_TYPE'].replace(r'.*truck.*', 'TRUCK', regex=True, flags=re.IGNORECASE)
这里的.*表示任意字符(包括空格),所以"BOX TRUCK"、"FIRE TRUCK"、"Dumpster truck"这些都会被统一替换成"TRUCK"。
如果未来你需要针对不同车辆类型做不同替换,还可以扩展成字典形式:
replace_map = { r'.*truck.*': 'TRUCK', r'.*van.*': 'VAN', r'FIRE ENGINE': 'FIRE TRUCK' # 精确匹配某个特定值 } dft['VEHICLE_TYPE'] = dft['VEHICLE_TYPE'].replace(replace_map, regex=True, flags=re.IGNORECASE)
这样就能满足你批量替换多种车辆类型的需求啦!
内容的提问来源于stack exchange,提问作者Sara Guizani
相关产品推荐
相关产品推荐

