我正在尝试将数据输入和处理到python中,并且无法将csv转换为该行的正确格式。
我尝试打印一行并尝试使用Regex搜索字符串,但我对此不太熟悉。
timeNote = ['18.30-19.00', '4PM-5PM', '3-4', '4-4.10PM', '15-18', '15 - 17']
我尝试使用此
for i in range(len(timeNote)):
print(re.findall(r'\b\d+\b', timeNote[i]))
它打印出这个
['18', '30', '19', '00']
[]
['3', '4']
['4', '4']
['15', '18']
['15', '17']
如果有更好的方法甚至可以转换为时域,将不胜感激。如果不是很明显,我对python还是很陌生的。
答案 0 :(得分:0)
自从您标记了pandas
以来,这就是一种方法。请注意,您可以将extract
内的模式用作正则表达式模式:
timeNote = ['18.30-19.00', '4PM-5PM', '3-4', '4-4.10PM', '15-18', '15 - 17']
s = pd.Series(timeNote)
pattern = '(?P<start>[\d\.]+)(?P<start_pm>PM)?\D*(?P<end>[\d\.]+)(?P<end_pm>PM)?'
s.str.extract(pattern)
输出
start start_pm end end_pm
0 18.30 NaN 19.00 NaN
1 4 PM 5 PM
2 3 NaN 4 NaN
3 4 NaN 4.10 PM
4 15 NaN 18 NaN
5 15 NaN 17 NaN
有关正则表达式的解释,您可以粘贴模式here。
从那里,您可以选择解释您的数据。请注意,使用这种形式,start
和and
是字符串。
我们甚至可以更疯狂地解析小时和分钟:
pattern = ('(?P<s_h>[\d]+)'+ # start hour
'[.:]?(?P<s_m>\d+)?'+ # start minute
'(?P<s_pm>PM)?' + # start PM
'\D*(?P<e_h>\d+)'+ # end hour
'[.:]?(?P<e_m>\d+)?'+ # end minute
'(?P<e_pm>PM)?' # end PM
)
print(s.str.extract(pattern))
给予:
s_h s_m s_pm e_h e_m e_pm
0 18 30 NaN 19 00 NaN
1 4 NaN PM 5 NaN PM
2 3 NaN NaN 4 NaN NaN
3 4 NaN NaN 4 10 PM
4 15 NaN NaN 18 NaN NaN
5 15 NaN NaN 17 NaN NaN