将不一致的格式转换为时间(小时,分钟),再转换为更清晰的一致格式

时间:2019-07-05 21:59:41

标签: python pandas formatting analysis

我正在尝试将数据输入和处理到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还是很陌生的。

1 个答案:

答案 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

从那里,您可以选择解释您的数据。请注意,使用这种形式,startand是字符串。

我们甚至可以更疯狂地解析小时和分钟:

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