仅从Python系列提取数字

时间:2019-01-14 16:15:25

标签: python regex string pandas dataframe

我有一个类似的系列:

ID
WTG-1
11
11-1
12B1
13-1
5
6
G7
.
.

我只是希望能够从每个ID中提取 all 个数字。

使用代码时:

df['ID'] = df['ID'].str.extract('(\d+)', expand=True)

它确实从行的开头提取所有内容,但是如果存在字符串/字母/字符分隔符,则跳过数字-即对于11-1,它仅收集11,而没有多余的1。 >

我希望输出为:

ID         ID #
WTG-1      1
11         11
11-1       111
12B1       121
13-1       131
5          5
6          6
G7         7
.
.

有没有一种方法可以计算出两者之间的字符?

3 个答案:

答案 0 :(得分:4)

使用findall

df.ID.str.findall('(\d+)').apply(''.join)
Out[92]: 
0      1
1     11
2    111
3    121
4    131
5      5
6      6
7      7
Name: ID, dtype: object

答案 1 :(得分:1)

astypeapply可以做到。

df["ID"] = df["ID"].apply(lambda x: "".join(c for c in x if c.isdigit()).astype(int)

答案 2 :(得分:1)

或替换

df['New_ID'] = df.ID.str.replace('\D+', '')

    ID      New_ID
0   WTG-1   1
1   11      11
2   11-1    111
3   12B1    121
4   13-1    131
5   5       5
6   6       6
7   G7      7