如何避免Pandas to_dict()将时间戳转换为字符串?
解决DataFrame to_dict()转换Unix时间戳为日期字符串的问题
pandas的to_dict()方法会自动将datetime类型的字段格式化为yyyy-mm-dd字符串,要保留原始Unix时间戳数值,可采用以下几种方案:
方案1:读取数据时强制保留数值类型
在pd.read_sql_query中通过dtype参数指定date列的类型,避免pandas自动将其解析为datetime对象:
df_results = pd.read_sql_query( sql_query_str, _engine, dtype={'date': 'int64'} # 根据实际时间戳精度调整类型,如int32/float64 ) return_object["results"] = df_results.to_dict(orient='records') # 输出的JSON中"date"会保留原始Unix时间戳数值
方案2:将datetime列转回Unix时间戳
如果数据已被解析为datetime类型,可手动转换回对应的Unix时间戳(根据原始精度选择秒/毫秒):
df_results = pd.read_sql_query(sql_query_str, _engine) # 转换为秒级时间戳(若原始是毫秒则移除//10**9) df_results['date'] = df_results['date'].astype(int) // 10**9 return_object["results"] = df_results.to_dict(orient='records')
方案3:使用to_json+json.loads(你已验证的方法)
利用to_json默认将datetime转为Unix时间戳的特性,再转回字典格式,还可通过date_unit参数指定时间戳精度:
# date_unit可选's'(秒)、'ms'(毫秒)、'us'(微秒)、'ns'(纳秒) json_str = df_results.to_json(orient='records', date_unit='s') return_object["results"] = json.loads(json_str) # 输出的JSON中"date"为对应精度的Unix时间戳数值
内容的提问来源于stack exchange,提问作者rex
相关产品推荐
相关产品推荐

