如何修改代码使输出数据仅保留小时级时间格式?
解决方法:将时间截断到小时级
你需要把时间的分钟、秒、微秒部分置为0,或者直接格式化输出为固定小时格式,以下是两种可行方案:
方案1:保留datetime类型(截断到小时)
直接对解析后的datetime对象做截断处理,重置分钟、秒、微秒为0,这样存储到DataFrame的是标准小时级时间对象,输出到CSV后Excel会识别为小时级时间:
import json import os from datetime import datetime import pandas as pd PPT_id = 'S116' datetime_lst = [] temp_lst = [] filepath_lst = os.listdir('./input/') for filepath in filepath_lst: with open('./input/' + filepath,'r') as f: # 用with语句自动管理文件关闭,更安全 data = json.load(f) for item in data['items']: dtime = datetime.strptime(item['timestamp'], '%Y-%m-%dT%H:%M:%S%z') readings = item['readings'] for read in readings: if read['station_id'] == PPT_id: # 截断到小时:重置分钟、秒、微秒为0 dtime_hourly = dtime.replace(minute=0, second=0, microsecond=0) datetime_lst.append(dtime_hourly) temp_lst.append(read['value']) out = pd.DataFrame({'Datetime': datetime_lst, 'Temperature': temp_lst}) out.to_csv('temperature.csv', index=False)
方案2:直接输出小时级字符串
如果不需要datetime类型,直接把时间格式化为%d/%m/%Y %H:00的字符串,CSV里的时间会直接显示为固定小时格式:
import json import os from datetime import datetime import pandas as pd PPT_id = 'S116' datetime_lst = [] temp_lst = [] filepath_lst = os.listdir('./input/') for filepath in filepath_lst: with open('./input/' + filepath,'r') as f: data = json.load(f) for item in data['items']: dtime = datetime.strptime(item['timestamp'], '%Y-%m-%dT%H:%M:%S%z') readings = item['readings'] for read in readings: if read['station_id'] == PPT_id: # 直接格式化为小时级字符串 dtime_str = dtime.strftime('%d/%m/%Y %H:00') datetime_lst.append(dtime_str) temp_lst.append(read['value']) out = pd.DataFrame({'Datetime': datetime_lst, 'Temperature': temp_lst}) out.to_csv('temperature.csv', index=False)
原代码问题说明
你之前的代码把时间转成%H%M(比如0002)再转回datetime,实际上还是保留了分钟数(02),所以输出会显示分钟。上述两种方法都能彻底移除分钟部分,只保留小时级时间。
内容的提问来源于stack exchange,提问作者jun long
相关产品推荐
相关产品推荐

