Python DataFrame操作:如何移除值内空格及末尾.0后缀
问题解决方法
你之前的代码不生效是因为两个核心问题:一是replace('', "")是替换空字符串,无法匹配数据里的空格;二是只处理了后缀.0,没有覆盖空格场景。直接在DataFrame层面做批量清洗效率更高,具体实现如下:
第一步:定义通用清洗函数,统一处理异常格式
import pandas as pd import numpy as np # 函数作用:去除所有空格、删除末尾.0后缀、空值转NaN def clean_code(x): # 先转字符串,移除所有半角、全角空格(包括首尾、中间位置的空格) s = str(x).replace(" ", "").replace(" ", "") # 匹配末尾.0后缀并删除 if s.endswith(".0"): s = s[:-2] # 清洗后为空的内容返回NaN,方便后续删空 return s if s != "" else np.nan
第二步:批量清洗目标列
# 清洗持仓表的合约编码列 df_position["SecurityReference"] = df_position["SecurityReference"].apply(clean_code) # 清洗现金交易表的合约编码列 df_tradeCash["MurexSecurityReference"] = df_tradeCash["MurexSecurityReference"].apply(clean_code)
第三步:执行去空、去重逻辑,获取最终列表
# 删空、去重逻辑和你原有逻辑一致 df_position.dropna(subset=["SecurityReference"], inplace=True) df_position.drop_duplicates(subset=["SecurityReference"], inplace=True) df_tradeCash.dropna(subset=["MurexSecurityReference"], inplace=True) df_tradeCash.drop_duplicates(subset=["MurexSecurityReference"], inplace=True) # 直接获取清洗完成的列表,不需要二次处理 tradePositionList = df_position["SecurityReference"].tolist() tradeCashList = df_tradeCash["MurexSecurityReference"].tolist() securitylist = tradePositionList + tradeCashList
原代码问题说明
- 你用
replace('', "")只能替换完全为空的字符串,对G Z1、L M4这类带空格的内容没有处理效果 - 列表推导式处理几万条数据的效率远低于pandas的apply批量处理,优先在DataFrame层面做清洗更适合大量数据场景
内容的提问来源于stack exchange,提问作者Bruno Lorena
相关产品推荐
相关产品推荐

