使用pandas to_json导出DataFrame时如何保留微秒?
解决pandas to_json丢失微秒的问题
默认情况下pandas的to_json方法会把datetime类型的精度截断到毫秒,要保留微秒可以用以下两种方案:
方案一:将时间列转为带微秒的字符串导出
把datetime列格式化为包含微秒的字符串后再导出,读取时再转换回datetime类型:
import pandas as pd from datetime import datetime as dt # 构造测试数据 df = pd.DataFrame( { 'timestamp' : [dt.strptime('2023-09-19 10:10:10.111222', '%Y-%m-%d %H:%M:%S.%f')] } ) print("原始数据:") print(df) # 将时间列转为带微秒的字符串 df['timestamp'] = df['timestamp'].dt.strftime('%Y-%m-%d %H:%M:%S.%f') # 导出JSON df.to_json('data.json', orient='records') # 读取并转换回datetime类型 df1 = pd.read_json('data.json') df1['timestamp'] = pd.to_datetime(df1['timestamp'], format='%Y-%m-%d %H:%M:%S.%f') print("\n读取后的数据:") print(df1)
方案二:使用date_format='iso'参数直接导出
利用pandas支持的ISO日期格式序列化,该格式原生支持微秒精度:
import pandas as pd from datetime import datetime as dt # 构造测试数据 df = pd.DataFrame( { 'timestamp' : [dt.strptime('2023-09-19 10:10:10.111222', '%Y-%m-%d %H:%M:%S.%f')] } ) print("原始数据:") print(df) # 导出时指定date_format为iso,保留微秒 df.to_json('data.json', date_format='iso') # 读取时自动转换日期类型 df1 = pd.read_json('data.json', convert_dates=['timestamp']) print("\n读取后的数据:") print(df1)
两种方案都能让导出的JSON保留完整的微秒信息,读取后可以恢复原始的datetime精度。
内容的提问来源于stack exchange,提问作者chubbychunk
相关产品推荐
相关产品推荐

