如何在pandas中将$1.2K/$1.2M类object dtype转换为float dtype
pandas转换带单位货币字符串为数值的实现方法
核心思路
首先拆分原始字符串中的货币符号、数字部分、单位后缀,再将后缀转换为对应倍率和数字相乘,最终生成float类型的新列Y。
完整实现代码
第一步:导入依赖并构造示例数据
import pandas as pd # 此处替换为你自己的DataFrame即可 df = pd.DataFrame({ 'raw_currency': ['$1.2K', '$1.45M', '$500', '$3.2B', '$89.9K'] })
第二步:定义单位映射规则
你可以根据自己的数据补充其他单位:
unit_map = { 'K': 10 ** 3, 'M': 10 ** 6, 'B': 10 ** 9, '': 1 }
第三步:执行转换生成新列Y
向量化写法(性能更高,适合大数据量)
# 正则提取$后的数字部分和单位部分 df[['num_part', 'unit_part']] = df['raw_currency'].str.extract(r'\$(\d+\.?\d*)([KMB]?)') # 计算最终数值 df['Y'] = df['num_part'].astype(float) * df['unit_part'].map(unit_map) # 可选:删除中间生成的辅助列 df.drop(columns=['num_part', 'unit_part'], inplace=True)
简洁apply写法(适合小数据量,代码更易读)
def curr_to_float(val): # 去掉美元符号 val_clean = val.replace('$', '') # 匹配最后一位是否为单位 last_char = val_clean[-1].upper() if last_char in unit_map: return float(val_clean[:-1]) * unit_map[last_char] return float(val_clean) df['Y'] = df['raw_currency'].apply(curr_to_float)
注意事项
- 如果数据中存在小写的k、m等单位,可在转换前新增一行
df['raw_currency'] = df['raw_currency'].str.upper()统一格式 - 最终生成的
Y列默认是float64类型,直接满足数值运算要求
内容的提问来源于stack exchange,提问作者Sandy24
相关产品推荐
相关产品推荐

