【问题标题】:Converting inconsistent formatting into time (hour,minute) into cleaner consistent formatting将不一致的格式转换为时间(小时、分钟)为更清晰的一致格式
【发布时间】:2019-11-16 11:25:51
【问题描述】:

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

【问题讨论】:

  • 你能给我们一个期望输出的例子吗?
  • 您的数据存在一些不确定性,“3-4”是“3AM-4AM”还是“3PM-4PM”?
  • 大概是下午 3 点到 4 点。
  • 是这样的,['10:00', '18:00', '12:00', '09:00', '09:00', '11:00', '10:00']

标签: python pandas formatting analysis


【解决方案1】:

由于您标记了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

【讨论】:

  • 谢谢!!假设下午 3 点到 4 点,我应该如何度过大约 24 小时的时间?
  • 你检查数字是不是小于,比如说6,然后加12?
  • 干杯人。我应该如何用 :00 替换末端并替换 .带有:
  • 您可以在s_me_m 上执行fillna('00')s.replace('\.', ':') 应将 . 替换为 :
  • @ChrisCharley 你读过这个问题吗?有时没有PM's。
猜你喜欢
  • 2015-11-03
  • 1970-01-01
  • 2020-10-14
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
  • 2012-10-28
  • 2023-03-22
  • 1970-01-01
相关资源
最近更新 更多