在Pandas DataFrame中提取带单位数值并统一单位至米的方法
解决Pandas提取字符串数值并统一单位的问题
嘿,我来帮你搞定这个需求!要从字符串里提取数值、识别单位并统一成米(或者你想要的其他单位),用正则表达式配合Pandas的操作就能轻松实现。下面一步步来:
步骤1:构造示例数据
首先咱们先把你给的示例数据做成DataFrame:
import pandas as pd data = { "details": ["Distance", "Longest straight", "Top speed", "Full throttle"], "numbers": ["350m", "860m", "305km", "61 per cent"] } df = pd.DataFrame(data)
步骤2:编写处理函数(最灵活的方式)
我推荐写一个自定义函数,用正则匹配数值和单位,然后根据单位做转换。这样不管后续有什么新单位(比如cm),都能轻松扩展:
import re def process_number_string(s): # 正则匹配:捕获数字,以及可选的单位(m/km/per cent),兼容数字和单位间的空格 match_result = re.match(r'(\d+)\s*(m|km|per cent)?', s.strip()) if not match_result: return None # 处理无法匹配的异常情况 # 提取数值和单位 raw_num = int(match_result.group(1)) unit = match_result.group(2) # 根据单位转换数值 if unit == 'km': return raw_num * 1000 # 千米转米 elif unit == 'm' or unit == 'per cent': return raw_num # 米直接保留,百分比提取数字 else: return raw_num # 其他未定义单位默认返回原数字
步骤3:应用函数到DataFrame
把函数用apply方法作用到numbers列上,直接替换原列或者生成新列都可以:
# 替换原numbers列 df['numbers'] = df['numbers'].apply(process_number_string)
最终输出结果
运行完上面的代码,你的DataFrame就变成了:
| details | numbers |
|---|---|
| Distance | 350 |
| Longest straight | 860 |
| Top speed | 305000 |
| Full throttle | 61 |
扩展说明
- 如果你的数据里有小数(比如
1.2km),只需要把正则里的(\d+)改成(\d+\.?\d*),然后把int换成float就行。 - 如果想保留原列,生成新列的话,改成
df['converted_numbers'] = df['numbers'].apply(process_number_string)即可。 - 要是有更多单位需要支持(比如
cm转米除以100),直接在函数里加对应的判断分支就好。
内容的提问来源于stack exchange,提问作者doyz
相关产品推荐
相关产品推荐

