You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中提取字符串数字?及Pandas数据框提取指定面积数值

问题1:如何在Python中实现从字符串里提取数字?

嘿,这个需求太常见啦!我给你几种实用的方法,你可以根据自己的具体场景挑:

  • 方法1:正则表达式(最灵活)
    如果你要提取所有数字(包括整数、小数、带负号的),用re.findall()绝对是首选。比如:

    import re
    
    s = "abc123def45.67ghi-89"
    numbers = re.findall(r'-?\d+\.?\d*', s)
    print(numbers)  # 输出 ['123', '45.67', '-89']
    

    简单解释下这个正则:-?匹配可选的负号,\d+抓一个或多个数字,\.?匹配可选的小数点,\d*匹配小数点后可能存在的数字。要是你只需要正整数,把后面的\.?\d*去掉,改成r'-?\d+'就行。

  • 方法2:遍历字符串筛选(适合简单场景)
    要是你只需要正整数,而且不需要区分单独的数字,也可以直接遍历字符串筛选:

    s = "abc123def45"
    digits = ''.join([c for c in s if c.isdigit()])
    print(digits)  # 输出 '12345'
    

    这个方法简单粗暴,但没法处理小数、负号,还会把所有数字连在一起,适合需求简单的情况。


问题2:从Pandas DataFrame的某一列中提取仅面积数值(处理不可中断空格)

这个场景的关键是要搞定数字和sq之间的不可中断空格(也就是Unicode里的\u00A0),普通的空格匹配可能会失效,我给你两个靠谱的方案:

  • 方案1:正则精准提取(推荐)
    用Pandas的str.extract()方法,直接匹配字符串开头的数字,不管后面的特殊空格和其他内容:

    import pandas as pd
    import re
    
    # 先构造示例数据(包含不可中断空格)
    df = pd.DataFrame({'area': ['568\xa0sq mi (1,471 km2)', '1234\xa0sq mi (3196 km2)', '789 sq mi (2043 km2)']})
    
    # 提取开头的数字,兼容普通空格和不可中断空格
    df['area_num'] = df['area'].str.extract(r'^(\d+)', expand=False)
    
    # 要是你想更精准匹配数字+不可中断空格+sq的结构,可以改成:
    # df['area_num'] = df['area'].str.extract(r'^(\d+)\u00A0sq', expand=False)
    
    print(df)
    

    运行后输出:

    area area_num
    0  568 sq mi (1,471 km2)      568
    1  1234 sq mi (3196 km2)     1234
    2    789 sq mi (2043 km2)      789
    

    解释下:^(\d+)匹配字符串开头的一个或多个数字,括号用来捕获这个我们需要的数字组,str.extract()会自动提取这个组的内容。如果你的数据里两种空格都有,用\s(匹配所有空白字符)替换\u00A0就行,比如r'^(\d+)\s+sq'。

  • 方案2:拆分字符串处理(简单直接)
    因为数字在字符串最开头,也可以用str.split()拆分,指定分隔符为不可中断空格:

    df['area_num'] = df['area'].str.split('\u00A0').str[0]
    

    这个方法更简单,但前提是数字后面一定紧跟不可中断空格+sq,而且开头没有其他干扰字符。如果数据里混合了普通空格和不可中断空格,可以先统一替换再拆分:

    df['area_num'] = df['area'].str.replace(r'\s', ' ').str.split(' ').str[0]
    

内容的提问来源于stack exchange,提问作者Hussein Khalaf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 16:27:55