如何解析日语“30小时”格式的时间进行数据分析?

问题描述 投票:0回答:1

我正在考虑一个涉及日本电视广播信息的数据分析项目。相关数据将包括播出时间,其中一些是深夜播出的节目。

日本深夜电视节目表遵循一种非标准时间格式,称为“30 小时制”(简短的英文解释此处)。大多数时间均以正常的日本标准时间给出,格式为 %H:%M。然而,从午夜到早上 6 点的时间被视为前一天的延长,并进行相应编号,其逻辑是人们熬夜的经历就是这样。例如《超时空要塞Frontier》在关西凌晨1点25分播出,但写的是25点25分。

我想在 Pandas 或 Polars DataFrame 中使用这些数据。理论上,它可以保留为字符串,但将其转换为日期时间的标准格式会更有用 - 无论是 Python 的内置类型,还是 NumPy 或 Polars 中使用的类型。一种简单的方法可能是:

from datetime import date, time, datetime from zoneinfo import ZoneInfo def process_30hour(d: date, t: str): h, m = [int(n) for n in t.split(':')] # assumes format 'HH:MM' for t if h > 23: h -= 24 d += 1 return datetime.combine(d, time(h, m), ZoneInfo('Japan'))

然后可以使用 
DataFrame.apply()

将其应用于整个 DataFrame。然而,可能有一种更高效的方法,特别是考虑到 DataFrame 的矢量化特性——如果有替代方案,两个库都建议避免

DataFrame.apply()
    

python pandas numpy datetime python-polars
1个回答
0
投票

timedelta

:
from datetime import date, time, datetime, timedelta from zoneinfo import ZoneInfo def process_30hour(d: date, t: str): h, m = map(int, t.split(':')) # assumes format 'HH:MM' for t t = timedelta(hours=h, minutes=m) return datetime.combine(d, time(), ZoneInfo('Japan')) + t process_30hour(date(2024, 12, 20), '25:25')

输出:

datetime.datetime(2024, 12, 21, 1, 25, tzinfo=zoneinfo.ZoneInfo(key='Japan'))

相同的逻辑可以用于 pandas:

df = pd.DataFrame({'date': ['2024-12-20 20:25', '2024-12-20 25:25']}) # split string tmp = df['date'].str.split(expand=True) # convert to datetime/timedelta, combine df['datetime'] = pd.to_datetime(tmp[0]) + pd.to_timedelta(tmp[1]+':00')

输出:

date datetime 0 2024-12-20 20:25 2024-12-20 20:25:00 1 2024-12-20 25:25 2024-12-21 01:25:00

	
© www.soinside.com 2019 - 2024. All rights reserved.