如何在熊猫数据框中应用正则表达式以提取第一个冒号(而不是第二个冒号)之后的所有值?

时间:2019-05-07 15:01:54

标签: regex python-3.x pandas jupyter-notebook

我有一张表,其中A列的格式为'12:30:45'。我想创建一个B列,我只在A列的第一个冒号之后得到数字。

您如何在python上使用正则表达式仅提取第一个冒号之后的数字,以便最后得到':30:45'?

我见过正则表达式用于提取数字,字符串,在空格之间分割的值,但是在冒号之后找不到用于提取的正则表达式。

我是regex的新手,任何建议将不胜感激。

2 个答案:

答案 0 :(得分:1)

使用.str.split将拆分次数限制为n=1

print(df)
                  time
0             12:30:45
1                12:30
2                12312
3  1:123:123123:123123

df.time.str.split(':', n=1).str[1]
#0                30:45
#1                   30
#2                  NaN
#3    123:123123:123123
#Name: time, dtype: object

如果您真的需要前导分号':'+df.time.str.split(':', n=1).str[1]'

答案 1 :(得分:1)

您可以将Series.str.extractregex结合使用来获得:,包括:

# Print reproducable example dataframe
df = pd.DataFrame({'A':['12:30:45', '10:44:09', '8888']})
print(df)

          A
0  12:30:45
1  10:44:09
2      8888

df['A'] = df['A'].str.extract('^[^:]*(:.*)$')

print(df)
        A
0  :30:45
1  :44:09
2     NaN

如果您要保留没有:的数字,以致没有得到NaN,请使用正则表达式后备{{1} },您可以将其读取为:|.*

or all