datetimeやdateutilでは24時とか25時とか対応していないようです。よって、面倒ですが専門のパーサーを自作するしかなさそうです。作っておけば、pandasに対してもaggにより気持ち良い記述で適用可能です。
Python
1import pandas as pd
2import datetime
3import re
4
5def datetime_parseEx(s):
6 s += "0年0月0日0時0分0秒" # 正規表現のデフォルトマッチ結果
7 year = int(re.search(r'(\d+)年', s).group(1))
8 month = int(re.search(r'(\d+)月', s).group(1))
9 day = int(re.search(r'(\d+)日', s).group(1))
10 hour = int(re.search(r'(\d+)時', s).group(1))
11 minute = int(re.search(r'(\d+)分', s).group(1))
12 second = int(re.search(r'(\d+)秒', s).group(1))
13 result = datetime.datetime(year, month, day, 0, minute, second)
14 result = result + datetime.timedelta(hours=hour)
15 return result
16
17print(datetime_parseEx('2019年8月16日1時'))
18#2019-08-16 01:00:00
19print(datetime_parseEx('2019年8月31日25時'))
20#2019-09-01 01:00:00
21
22df = pd.DataFrame([
23 ['2019年8月16日1時', 100],
24 ['2019年8月31日25時', 150]],
25 columns=['日時', '値'])
26
27print(df['日時'].agg(datetime_parseEx))
28#0 2019-08-16 01:00:00
29#1 2019-09-01 01:00:00
30#Name: 日時, dtype: datetime64[ns]