python-3.x Pandas从字符串中提取数字

iswrvxsc  于 2023-05-02  发布在  Python
关注(0)|答案(4)|浏览(185)

给定以下 Dataframe :

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

fslejnso

fslejnso1#

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

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

为您提供:

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

(\d+)是正则表达式捕获组,\d+指定只匹配数字的正则表达式模式。请注意,这只适用于整数,而不是浮点数。

toiithl6

toiithl62#

你可以使用“assign”函数将你的列替换为你的结果:

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

muk1a3rh3#

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

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

a6b3iqyw4#

如果你有多个不相交的数字集,比如在1a2b3c中,你想提取123,你可以用Series.str.replace来做:

>>> df
        A
0      1a
1      b2
2    a1b2
3  1a2b3c
>>> df['A'] = df['A'].str.replace('\D+', '')
0      1
1      2
2     12
3    123

您也可以使用Series.str.extractallgroupby来解决这个问题,但我认为这个更容易。
希望这有帮助!

相关问题