【问题标题】:Pandas Extract Number from StringPandas 从字符串中提取数字
【发布时间】:2026-02-06 09:50:02
【问题描述】:

给定以下数据框:

import pandas as pd
import numpy as np
df = pd.DataFrame({'A':['1a',np.nan,'10a','100b','0b'],
                   })
df

    A
0   1a
1   NaN
2   10a
3   100b
4   0b

我想从每个单元格(它们存在的地方)中提取数字。 期望的结果是:

    A
0   1
1   NaN
2   10
3   100
4   0

我知道可以使用str.extract 完成,但我不确定如何。

【问题讨论】:

    标签: python string python-3.x pandas


    【解决方案1】:

    给它一个正则表达式捕获组:

    df.A.str.extract('(\d+)')
    

    给你:

    0      1
    1    NaN
    2     10
    3    100
    4      0
    Name: A, dtype: object
    

    【讨论】:

    • 如果有逗号,我该怎么做:6,000 a
    • @StevenG 先去掉逗号?
    • 截至 2020 年,此代码会发出 FutureWarning。您可以通过将参数 expand=False 添加到 extract 来绕过它
    • 如果字母后面有数字,这不起作用
    • 这不适用于我的带有数字和单位的列:0.7 mg
    【解决方案2】:

    要在上面的评论中回答@Steven G 的问题,这应该可行:

    df.A.str.extract('(^\d*)')
    

    【讨论】:

      【解决方案3】:

      您可以使用“分配”功能将您的列替换为您的结果:

      df = df.assign(A = lambda x: x['A'].str.extract('(\d+)'))
      

      【讨论】: