You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame列中针对性删除部分行的指定字符?

解决Pandas DataFrame Price列的字符清洗问题

我来帮你搞定这个数据清洗的小麻烦!你遇到的问题核心是正则表达式没有加上位置锚点,导致匹配范围超出了你预期的范围,咱们一步步来修正:

问题分析

  1. 你最初用df['Price'].replace('.T', '', regex=True)时,正则里的.是特殊字符,会匹配任意单个字符,而且没有限定匹配位置,所以它把.TPX里的.T也一起替换掉了,才得到了PX。
  2. 后来用replace('.', '', regex=True)时,.匹配了所有字符,自然把整个列的内容都清空了——这是因为.在正则中代表任意单个字符,必须转义成\.才能匹配真正的点号。

正确解决方案

我们需要用带位置锚点的正则表达式来精准匹配目标字符:

  • 用^\.匹配字符串开头的点号(^表示行首)
  • 用\.T$匹配字符串末尾的.T($表示行尾,\.转义点号避免它成为通配符)

你可以把两个规则合并成一次操作,也可以分步骤处理,两种方式都能得到预期结果:

方式一:合并正则规则一次处理

import pandas as pd
cars = {'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi A4','Suzuki'], 'Price': ['22000.T','25000.T','27000','.TPX','.NKM1'] }
df = pd.DataFrame(cars, columns = ['Brand', 'Price'])

# 用正则同时匹配开头的点和末尾的.T
df['Price'] = df['Price'].replace(r'^\.|(?<=\d)\.T$', '', regex=True)
print(df)

这里的(?<=\d)\.T$是额外加了个正向断言,确保.T前面是数字,避免误删其他位置的.T(比如如果有类似abc.Tdef的内容不会被误处理)。

方式二:分步骤处理(更直观)

import pandas as pd
cars = {'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi A4','Suzuki'], 'Price': ['22000.T','25000.T','27000','.TPX','.NKM1'] }
df = pd.DataFrame(cars, columns = ['Brand', 'Price'])

# 第一步:删除末尾的.T
df['Price'] = df['Price'].str.replace(r'\.T$', '', regex=True)
# 第二步:删除开头的.
df['Price'] = df['Price'].str.replace(r'^\.', '', regex=True)
print(df)

最终输出结果

两种方式都会得到你想要的清洗后数据:

Brand   Price
0     Honda Civic   22000
1  Toyota Corolla   25000
2      Ford Focus   27000
3         Audi A4     TPX
4          Suzuki    NKM1

内容的提问来源于stack exchange,提问作者sam_sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 11:18:16