如何移除Pandas DataFrame列中数字末尾字母并解决NaN问题
问题原因
你的hole_ID_MWD列混合了字符串类型(如115b)和数值类型(如490、500)。Pandas的.str系列方法仅对字符串类型单元格生效,非字符串类型的单元格会被直接转为NaN,这就是纯数字单元格出现NaN的原因。
解决方案
推荐以下两种精准且避免NaN的处理方式:
方法1:先转字符串再正则替换(推荐)
先将整列转为字符串类型,再用正则仅移除末尾的小写字母(比替换所有非数字更严谨,避免误删其他合法字符):
df12['hole_ID_MWD'] = df12['hole_ID_MWD'].astype(str).str.replace(r'[a-z]$', '', regex=True)
- 正则
[a-z]$:仅匹配字符串末尾的单个小写字母,完美匹配你的需求场景。 astype(str):确保所有单元格都以字符串形式处理,避免非字符串类型触发NaN。
方法2:用apply+rstrip处理
通过apply遍历每个元素,转为字符串后用rstrip直接移除末尾的小写字母:
def clean_hole_id(val): return str(val).rstrip('abcdefghijklmnopqrstuvwxyz') df12['hole_ID_MWD'] = df12['hole_ID_MWD'].apply(clean_hole_id)
这种方式逻辑直观,适合对正则不熟悉的场景。
验证效果
处理后你的示例数据会得到期望输出:
| 索引 | hole_ID_MWD |
|---|---|
| 0 | 115 |
| 1 | 225 |
| 2 | 19 |
| 3 | 490 |
| 4 | 500 |
| 5 | 600 |
内容的提问来源于stack exchange,提问作者Abboud
相关产品推荐
相关产品推荐

