she*_*nzy 7 python regex split dataframe pandas
我有一个字符串列表:
content
01/09/15, 10:07 - message1
01/09/15, 10:32 - message2
01/09/15, 10:44 - message3
Run Code Online (Sandbox Code Playgroud)
我想要一个数据框,如:
date message
01/09/15, 10:07 message1
01/09/15, 10:32 message2
01/09/15, 10:44 message3
Run Code Online (Sandbox Code Playgroud)
考虑到列表中的所有字符串都以该格式开头,我可以分开-,但我宁愿寻找一种更聪明的方法.
history = pd.DataFrame([line.split(" - ", 1) for line in content], columns=['date', 'message'])
Run Code Online (Sandbox Code Playgroud)
(之后我会将日期转换为日期时间)
任何帮助,将不胜感激.
Zer*_*ero 11
您可以使用str.extract- 命名组可以成为列名
In [5827]: df['content'].str.extract('(?P<date>[\s\S]+) - (?P<message>[\s\S]+)',
expand=True)
Out[5827]:
date message
0 01/09/15, 10:07 message1
1 01/09/15, 10:32 message2
2 01/09/15, 10:44 message3
Run Code Online (Sandbox Code Playgroud)
细节
In [5828]: df
Out[5828]:
content
0 01/09/15, 10:07 - message1
1 01/09/15, 10:32 - message2
2 01/09/15, 10:44 - message3
Run Code Online (Sandbox Code Playgroud)
使用str.splitby \s+-\s+- \s+是一个或多个空格:
df[['date','message']] = df['content'].str.split('\s+-\s+', expand=True)
print (df)
content date message
0 01/09/15, 10:07 - message1 01/09/15, 10:07 message1
1 01/09/15, 10:32 - message2 01/09/15, 10:32 message2
2 01/09/15, 10:44 - message3 01/09/15, 10:44 message3
Run Code Online (Sandbox Code Playgroud)
如果需要删除content列添加DataFrame.pop:
df[['date','message']] = df.pop('content').str.split('\s+-\s+', expand=True)
print (df)
date message
0 01/09/15, 10:07 message1
1 01/09/15, 10:32 message2
2 01/09/15, 10:44 message3
Run Code Online (Sandbox Code Playgroud)