如何判断Price列值为lacs/Crore并转换为数值存回原列?
解决Pandas中金额单位转换问题
原始数据
import pandas as pd df = pd.DataFrame({'Price' : ['5.5 lacs', '5.7 Crore', '3.5 lacs', '3.15 lacs']})
需求
将lacs单位转换为原值×100000,Crore单位转换为原值×10000000,结果存回原Price列并转为整数。
方法一:向量式操作(高效处理大数据)
通过正则拆分数值和单位,利用映射表计算转换值,适合大规模数据集:
import pandas as pd df = pd.DataFrame({'Price' : ['5.5 lacs', '5.7 Crore', '3.5 lacs', '3.15 lacs']}) # 提取数值部分和单位部分 df[['num', 'unit']] = df['Price'].str.extract(r'(\d+\.?\d*) (lacs|Crore)') # 将数值转为浮点型 df['num'] = pd.to_numeric(df['num']) # 定义单位到转换系数的映射 unit_map = {'lacs': 100000, 'Crore': 10000000} # 计算转换后的值并覆盖原Price列,转为整数 df['Price'] = (df['num'] * df['unit'].map(unit_map)).astype(int) # 移除临时生成的num和unit列(可选) df = df.drop(['num', 'unit'], axis=1) # 输出结果 print(df)
方法二:Apply函数(代码简洁)
通过字符串拆分和条件判断直接转换,适合小数据集快速实现:
import pandas as pd df = pd.DataFrame({'Price' : ['5.5 lacs', '5.7 Crore', '3.5 lacs', '3.15 lacs']}) # 遍历每个Price值,根据单位计算转换后的值 df['Price'] = df['Price'].apply( lambda x: int(float(x.split()[0]) * 100000) if 'lacs' in x else int(float(x.split()[0]) * 10000000) ) print(df)
关键说明
- 单位判断:两种方法分别通过正则匹配、字符串包含判断来区分
lacs和Crore - 结果存回:直接对
df['Price']赋值即可覆盖原列数据 - 类型转换:最终转为整数符合需求中的示例结果(550000、57000000等)
内容的提问来源于stack exchange,提问作者The Technologist
相关产品推荐
相关产品推荐

