我有一个字符串列表:
content
01/09/15, 10:07 - message1
01/09/15, 10:32 - message2
01/09/15, 10:44 - message3
我想要一个数据框,例如:
date message
01/09/15, 10:07 message1
01/09/15, 10:32 message2
01/09/15, 10:44 message3
考虑到列表中的所有字符串都以该格式开头,我可以按-
拆分,但我宁愿寻找更聪明的方法。
history = pd.DataFrame([line.split(" - ", 1) for line in content], columns=['date', 'message'])
(我之后将日期转换为日期时间)
任何帮助将不胜感激。
答案 0 :(得分:9)
您可以使用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
详细
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
答案 1 :(得分:6)
\s+-\s+
使用str.split
- \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
如果需要删除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