如何格式化DataFrame中带英镑符号的货币字符串为浮点型以便排序
解决方案
带货币符号、千位分隔符的字符串默认按字符规则排序,必然会出现数值逻辑错误,需要先清洗字符串转成数值类型再排序,具体实现步骤如下:
- 数据清洗与类型转换
先移除字符串里的英镑符号£和千位分隔符,,再通过pandas内置的数值转换方法转成float类型,示例代码:
import pandas as pd # 构造测试数据集 df = pd.DataFrame({ "property_price": ["£880,000", "£88,500", "£850,000", "£845,000"] }) # 生成数值类型的辅助列 df["price_num"] = pd.to_numeric( df["property_price"].str.replace("£", "", regex=False).str.replace(",", "", regex=False) )
- 数值排序
按转换好的数值列做升序排序即可得到正确的数值顺序:
# 按数值升序排列,重置索引 df = df.sort_values(by="price_num", ascending=True).reset_index(drop=True)
- 格式化输出目标结果
如果需要保留千位分隔符的展示格式,可以把排序后的数值重新格式化:
df["sorted_result"] = df["price_num"].apply(lambda x: f"{x:,.0f}")
执行后打印df["sorted_result"]就能得到你预期的排序输出:
0 88,500 1 845,000 2 850,000 3 880,000 Name: sorted_result, dtype: object
注意事项
- 如果原始列存在空值、其他特殊币种符号或者异常字符,需要提前做缺失值处理、额外字符替换,避免类型转换报错。
- 不要直接对原始货币字符串做排序,字符串逐字符比对的逻辑会完全打乱数值顺序,必须基于数值类型列排序。
内容的提问来源于stack exchange,提问作者Mensa 23
相关产品推荐
相关产品推荐

