Pandas时间戳列导入Redshift报错,如何转换为标准格式?
问题场景
我有如下DataFrame:
d = {'Timestamp': ['Nov 16 10:39:54', 'Nov 16 10:39:54', 'Nov 16 10:39:54', 'Nov 16 10:39:54', 'Nov 16 10:40:17']} df_sample = pd.DataFrame(data=d) df_sample.head()
尝试将其加载到Redshift表时出现错误,错误信息如下:
ProgrammingError: {'S': 'ERROR', 'C': '42601', 'M': 'syntax error at or near "Full"', 'P': '88', 'F': '/home/ec2-user/padb/src/pg/src/backend/parser/parser_scan.l', 'L': '732', 'R': 'yyerror'}
虽可能是其他列导致问题,但想了解如何将该时间戳列转换为标准datetime格式。
时间戳转换方案
可以使用pandas.to_datetime()方法将字符串格式的时间戳转换为标准datetime类型,针对你的时间格式(月份缩写+日期+时分秒),指定format参数能确保转换准确高效:
import pandas as pd # 原DataFrame d = {'Timestamp': ['Nov 16 10:39:54', 'Nov 16 10:39:54', 'Nov 16 10:39:54', 'Nov 16 10:39:54', 'Nov 16 10:40:17']} df_sample = pd.DataFrame(data=d) # 转换为标准datetime格式 df_sample['Timestamp'] = pd.to_datetime(df_sample['Timestamp'], format='%b %d %H:%M:%S')
格式参数说明:
%b匹配英文月份缩写(如Nov对应11月)%d匹配两位数字的日期%H:%M:%S匹配24小时制的时分秒
由于Redshift的TIMESTAMP类型要求完整的年-月-日-时分秒格式,而原始数据缺少年份,需根据业务场景手动补充:
# 示例补充年份为2024,可按需修改 df_sample['Timestamp'] = df_sample['Timestamp'].apply(lambda x: x.replace(year=2024))
转换后的数据列会是标准datetime类型,符合Redshift对时间字段的格式要求。
内容的提问来源于stack exchange,提问作者Wolfy
相关产品推荐
相关产品推荐

