Pandas读取JSON文件时如何将毫秒时间戳转为datetime格式?
解决Pandas读取JSON时日期列变为毫秒时间戳的问题
刚好遇到过类似的场景~你的问题根源在于Pandas默认会把日期类型序列化为毫秒级时间戳存入JSON,读取时不会自动转换回日期格式。这里有两种实用的解决思路:
方法一:写入JSON时直接保存为日期字符串(更省心)
在调用to_json的时候,加上date_format='iso'参数,让日期以ISO格式的字符串保存,这样读取时Pandas可以轻松识别为日期类型:
修改你的代码如下:
from pandas import DataFrame, read_json from datetime import date import pandas as pd # 补充导入,后续转换可能用到 A = {'a': [date(2019,1,1),date(2019,1,2),date(2019,1,2)], 'b': [4,5,6]} df = DataFrame(A) print(df) filename = r'C:\temp\Export_DataFrame.json' # 写入时指定日期格式为ISO字符串,避免转成时间戳 df.to_json(filename, date_format='iso') # 读取时指定转换目标列,或者直接用convert_dates=True自动检测 df2 = read_json(filename, convert_dates=['a']) print(df2)
运行后df2的a列就会是你想要的日期格式啦。
方法二:读取后手动将时间戳转成日期
如果已经生成了带毫秒时间戳的JSON文件,也可以在读取后做转换:
# 先读取原始JSON df2 = read_json(filename) # 把毫秒时间戳转成datetime,一定要指定unit='ms'(因为是毫秒级) df2['a'] = pd.to_datetime(df2['a'], unit='ms') print(df2)
这里的unit='ms'是关键,要是漏了的话,Pandas会把它当作秒级时间戳处理,结果就会错得离谱。
内容的提问来源于stack exchange,提问作者Svend Andreasen
相关产品推荐
相关产品推荐

