如何在pandas DataFrame中清理金额列并实现Lakhs到Crore的单位转换
方案1:自定义函数实现(可读性高,适合中小数据量)
代码如下:
import pandas as pd def convert_to_crore(price_str): price_str = price_str.strip().lower() if "lakhs" in price_str: # 提取数值并除以100转换为Crore单位 num_val = float(price_str.replace("lakhs", "").strip()) return num_val / 100 elif "crore" in price_str: # 直接提取数值返回 num_val = float(price_str.replace("crore", "").strip()) return num_val # 无匹配单位时返回空值,可根据实际需求调整 return pd.NA # 应用转换到Price列,生成纯数字的Crore单位金额列 df["Price_Crore"] = df["Price"].apply(convert_to_crore)
方案2:向量化操作(性能更高,适合百万级以上大数据量)
代码如下:
# 提取数值部分 df["num"] = df["Price"].str.extract(r"(\d+\.?\d*)").astype(float) # 提取单位并统一转为小写 df["unit"] = df["Price"].str.extract(r"([a-zA-Z]+)").str.lower() # 按单位规则转换金额 df["Price_Crore"] = df.apply( lambda row: row["num"] / 100 if row["unit"] == "lakhs" else row["num"], axis=1 ) # 清理中间生成的辅助列 df.drop(columns=["num", "unit"], inplace=True)
两种方案最终都会生成新列Price_Crore,存储单位为Crore的纯数字金额值。如果不需要保留原始Price列,可直接赋值给df["Price"]覆盖原列。
内容的提问来源于stack exchange,提问作者Kunal Parihar
相关产品推荐
相关产品推荐

