如何在Python中将单元格时间值转换为时段文本?
Python实现时间到自然文本的转换
一、基于AM/PM的简单转换
如果只是简单根据时间字符串里的AM/PM标记转换,两种方法都能实现:
方法1:字符串直接判断
def time_to_simple_text(time_str): if 'AM' in time_str.upper(): return 'Morning' elif 'PM' in time_str.upper(): return 'Noon' return 'Unknown' # 测试 start_time = '12:01:24 AM' end_time = '11:44:53 PM' print(time_to_simple_text(start_time)) # 输出 Morning print(time_to_simple_text(end_time)) # 输出 Noon
方法2:用datetime解析后判断
from datetime import datetime def time_to_simple_text(time_str): time_obj = datetime.strptime(time_str, '%I:%M:%S %p') if time_obj.hour < 12: return 'Morning' else: return 'Noon' # 测试 print(time_to_simple_text('12:01:24 AM')) # Morning print(time_to_simple_text('11:44:53 PM')) # Noon
二、自定义时段分组
如果需要按自定义时段(比如5:00 AM-11:59 AM归为Morning,12:00 PM-5:00 PM归为Afternoon等),可以先把时间字符串解析为datetime.time对象,再通过区间判断实现:
from datetime import datetime, time def time_to_custom_text(time_str): # 解析时间字符串为time对象 time_obj = datetime.strptime(time_str, '%I:%M:%S %p').time() # 定义自定义时段区间 morning_start = time(5, 0, 0) morning_end = time(11, 59, 59) afternoon_start = time(12, 0, 0) afternoon_end = time(17, 0, 0) evening_start = time(17, 0, 1) evening_end = time(23, 59, 59) night_start = time(0, 0, 0) night_end = time(4, 59, 59) if morning_start <= time_obj <= morning_end: return 'Morning' elif afternoon_start <= time_obj <= afternoon_end: return 'Afternoon' elif evening_start <= time_obj <= evening_end: return 'Evening' elif night_start <= time_obj <= night_end: return 'Night' return 'Unknown' # 测试 print(time_to_custom_text('5:00:00 AM')) # Morning print(time_to_custom_text('12:00:00 PM')) # Afternoon print(time_to_custom_text('6:00:00 PM')) # Evening print(time_to_custom_text('3:00:00 AM')) # Night
如果是处理表格数据(比如pandas的DataFrame),可以直接用apply方法批量转换:
import pandas as pd # 模拟表格数据 df = pd.DataFrame({ 'start time': ['12:01:24 AM', '5:30:00 AM'], 'end time': ['11:44:53 PM', '4:00:00 PM'] }) # 批量添加转换后的列 df['start time_text'] = df['start time'].apply(time_to_custom_text) df['end time_text'] = df['end time'].apply(time_to_custom_text) print(df)
内容的提问来源于stack exchange,提问作者tran su
相关产品推荐
相关产品推荐

