如何从Pandas的income文本列中提取首个出现的英镑价格?
解决方案
直接使用Pandas的str.extract()方法即可,该方法默认返回每行第一个符合正则规则的匹配结果,刚好匹配你提取首个英镑价格的需求:
# 正则说明:匹配£符号后,由数字、逗号、可选小数点及后续数字组成的价格内容 price_pattern = r'£([\d,]+\.?\d*)' # 提取结果存入新列 df1['first_income'] = df1['Income'].str.extract(price_pattern)
针对你给出的示例数据,提取后得到的结果依次为:1,000000、1,000,050、15000000、520000,符合预期。
如果需要把提取到的文本价格转为可计算的数值类型,可以追加一步处理:
# 移除千位逗号后转为浮点型 df1['first_income'] = df1['first_income'].str.replace(',', '').astype(float)
原有代码问题说明
- 第一段代码使用
str.split()是按照匹配规则拆分字符串,并非提取内容,且你使用固定长度的.匹配价格,适配性极差,自然会匹配到多个英镑符号。 - 第二段代码将整列
df1['Income']直接转为字符串,相当于把所有行的内容拼接为一个长字符串再匹配,无法得到每行独立的首个价格结果。
内容的提问来源于stack exchange,提问作者Alex B
相关产品推荐
相关产品推荐

