我正在使用熊猫数据框。我正在尝试在日期和时间之后从字符串的其余部分拆分一列。
df
data
0 Oct 22 12:56:52 server1
1 Oct 22 12:56:52 server2
2 Oct 22 12:56:53 server2
3 Oct 22 12:56:54 server2
4 Oct 22 12:56:56 comp2
所需的输出:
df
date machine
0 Oct 22 12:56:52 server1
1 Oct 22 12:56:52 server2
2 Oct 22 12:56:53 server2
3 Oct 22 12:56:54 server2
4 Oct 22 12:56:56 comp2
[如果我尝试类似df["data"].str.extract('^(.*? [0-9]{2}) (.*)$')
的操作,它将在22天后删除所有内容
使用positive lookbehind
在{semicolon}{two numbers}{space}
上分割:
详细信息:
(?<=)
是正向后方(检查字符串之前是否有任何字符):\d{2}
是模式:{semicolon}{two numbers}
\s
是空格s = df['data'].str.split('(?<=:\d{2})\s')
df['date'] = s.str[0]
df['machine'] = s.str[1]
df = df.drop(columns='data')
输出
date machine
0 Oct 22 12:56:52 server1
1 Oct 22 12:56:52 server2
2 Oct 22 12:56:53 server2
3 Oct 22 12:56:54 server2
4 Oct 22 12:56:56 comp2
您还可以传递日期/时间的确切形式:
df['data'].str.extract('(\w* \d* \d*:\d*:\d*) (.*)')
输出:
0 1
0 Oct 22 12:56:52 server1
1 Oct 22 12:56:52 server2
2 Oct 22 12:56:53 server2
3 Oct 22 12:56:54 server2
4 Oct 22 12:56:56 comp2
尝试一下:
r"(?<=[\S ][\d]{2}:[\d]{2}:[\d]{2} )[\S ]+"
我不是正则表达式的最佳选择,肯定有更好的方法,但这是可行的