如何匹配DataFrame列值末位字符对应两类字典完成数值格式转换
实现代码(小数据量简洁版)
import pandas as pd # 定义映射字典 PositiveKey = {"{":"0", "A":"1", "B":"2"} NegativeKey = {"}":"0", "J":"1", "K":"2"} # 示例DataFrame,替换为你实际的df即可 df = pd.DataFrame({ "Column 1": ["000000002758A", "000000326588B", "000000000567J"] }) def convert_val(s): last_char = s[-1] num_prefix = s[:-1].lstrip("0") if last_char in PositiveKey: return int(num_prefix + PositiveKey[last_char]) / 100 elif last_char in NegativeKey: return -int(num_prefix + NegativeKey[last_char]) / 100 # 异常场景可自行补充返回逻辑 return 0 df["Column 1"] = df["Column 1"].apply(convert_val)
大数据量性能优化版(向量化操作)
如果处理的数据量超过10万行,建议用向量化操作代替行遍历的apply,执行效率更高:
# 构造统一映射表 full_map = {} for k, v in PositiveKey.items(): full_map[k] = (1, v) for k, v in NegativeKey.items(): full_map[k] = (-1, v) # 拆分字符、映射转换 df["last"] = df["Column 1"].str[-1] df["prefix"] = df["Column 1"].str[:-1].str.lstrip("0") df[["sign", "suffix"]] = df["last"].map(full_map).tolist() # 计算最终值 df["Column 1"] = df.apply(lambda x: int(x["prefix"] + x["suffix"]) * x["sign"] / 100, axis=1) df = df.drop(columns=["last", "prefix", "sign", "suffix"])
执行后得到的df就是你需要的目标结果。
内容的提问来源于stack exchange,提问作者zestyfred
相关产品推荐
相关产品推荐

