Pandas 从字符串中提取数字

Posted

技术标签:

【中文标题】Pandas 从字符串中提取数字【英文标题】:Pandas Extract Number from String 【发布时间】:2016-10-07 14:29:14 【问题描述】:

给定以下数据框:

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 完成,但我不确定如何。

【问题讨论】:

【参考方案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+)'))

【讨论】:

以上是关于Pandas 从字符串中提取数字的主要内容,如果未能解决你的问题,请参考以下文章

从 pandas Dataframe 中提取月份数据

pandas - 提取具有不同位置的不同字符集之间的数字

关于pandas处理数据,怎么提取某一列的部分数字

从不在任何其他数字之前或之后的pandas字符串列中提取最多N位数

pandas extractall() 没有提取给定正则表达式的所有案例?

如何使用 Pandas 从字符串中提取算术运算