我有一个类似的系列:
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
.
.
有没有一种方法可以计算出两者之间的字符?
答案 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)
astype
和apply
可以做到。
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