如何在Python中将Pandas DataFrame转换为换行分隔JSON时保留原时间戳格式
如何在Pandas中将DataFrame转为换行分隔JSON时保留原始时间戳格式
你遇到的问题是Pandas的to_json方法默认会对datetime类型做格式转换——要么转成带T和Z的ISO标准格式,要么转成时间戳数字,而你需要保留原始的YYYY-MM-DD HH:MM:SS样式。下面是可行的解决方案:
核心思路
先将DataFrame中的datetime类型列转换为字符串格式(保持你想要的时间戳样式),再导出为换行分隔JSON,这样就能避免Pandas自动修改时间格式。
具体步骤&代码示例
- 确保你的时间戳列是datetime类型(如果还不是,先转换):
import pandas as pd # 示例DataFrame df = pd.DataFrame({ 'timestamp': pd.to_datetime(['2020-08-17 07:38:02']), 'data': ['sample'] })
- 将datetime列转为字符串(直接用
astype(str)就能保留YYYY-MM-DD HH:MM:SS格式):
df['timestamp'] = df['timestamp'].astype(str)
- 导出为换行分隔JSON:
df.to_json("C:/myfolder/myfile.json", orient="records", lines=True)
执行后,导出的JSON内容会是:
{"timestamp":"2020-08-17 07:38:02","data":"sample"}
完全符合你的期望结果。
批量处理多个datetime列
如果你的DataFrame有多个datetime列,可以用apply批量转换,不用逐个处理:
# 遍历所有列,将datetime类型列转为字符串 df = df.apply(lambda col: col.astype(str) if pd.api.types.is_datetime64_any_dtype(col) else col) # 再导出JSON df.to_json("C:/myfolder/myfile.json", orient="records", lines=True)
为什么之前的尝试没成功?
- 尝试1:使用
date_format='iso'明确指定了输出ISO标准的时间格式,所以会得到2020-08-17T07:38:02Z; - 尝试2:没有指定日期处理参数,Pandas默认会将datetime类型转为毫秒级时间戳数字,也就是你看到的
1597649882000。
内容的提问来源于stack exchange,提问作者Sekhar
相关产品推荐
相关产品推荐

