如何防止 Excel 从时间戳中删除秒?

Posted

技术标签:

【中文标题】如何防止 Excel 从时间戳中删除秒?【英文标题】:How can I prevent Excel from removing seconds from timestamps? 【发布时间】:2020-10-21 05:50:12 【问题描述】:

我有一个具有第二分辨率的时间序列数据帧,我将其保存到 CSV 文件中:

import pandas as pd

dr = pd.date_range('01/01/2020 9:00', '01/01/2020 9:10', freq='1s')
df = pd.DataFrame(index=dr, data=range(len(dr)))
df.to_csv('some_data.csv', header=False)

然后我可以在 Excel 中打开它,一切看起来都很好:

如果我随后将文件保存在 Excel 中(不做任何更改),在重新打开时秒数会向下舍入为 0

在记事本中查看 Excel 保存的文件表明 秒数已丢失

1/1/2020 9:00,0
1/1/2020 9:00,1
1/1/2020 9:00,2
...

保存为副本或覆盖时会发生更改。奇怪的是,如果您在保存原始文档后保持打开状态,您仍然会看到保留的秒数,直到您关闭并重新打开。

在上下文中,我正在为其他(不使用 Python)用户编写文件,这些用户可能会使用 Excel 与他们的数据进行交互。甚至调整列的大小也会提示保存,所以我发现他们很可能会无意中丢失数据。

当我使用 Python 创建这个示例时,我也发现了用其他语言编写的时间戳的问题。

有没有更好的方法来记录时间序列数据来防止这种情况发生?或者我可以与以这种格式获取数据的用户共享 Excel 中的修复(最好是永久选项或设置)?

【问题讨论】:

在单元格格式下,你可以给它一个包含秒数的自定义模式 @MohammadAthar Athar 谢谢你的建议;我更新了对此的回应,似乎您每次打开文件时都必须这样做?如果是这样,那似乎仍然很容易丢失数据(即使用户知道这是一个修复方法,他们会记得吗?) 直接用pandasto_excel而不是to_csv保存怎么样?这会给你同样的问题吗? pandas.pydata.org/pandas-docs/stable/reference/api/… 你是如何保存文件的?如果您将其保存为 csv 文件,则日期/时间字段将保存为格式化。但如果您将其保存为 Excel 文件,则应保存基础值。 相关:***.com/questions/27801193/… - 似乎是 excel 试图“帮助”你的另一种情况。并最终成为一种痛苦。 【参考方案1】:

根据 cmets 发布答案:

另存为 XLSX 而不是 CSV

直接保存为 Excel 格式(df.to_excel() 而不是 df.to_csv())或将您的 CSV 从 Excel 保存为 Excel 格式。这将保留时间戳并且不需要任何额外的格式。 感谢vmouffron 和Ron 这种方法

在 Excel 中格式化 CSV 的数据

另一个选项是使用具有“自定义”格式的“单元格格式”选项(用于单元格或整个日期列)(在这种情况下,更改模板“m/d/yyyy h:mm”到“m/d/yyyy h:mm:ss”)。此选项允许您保留 CSV 格式和时间数据的完整范围。 感谢Mohammad 提供此答案。

这些选项中的每一个都有一个小的缺点。首先,您必须锁定用户使用 Excel 来查看数据。但是有许多免费工具可以将数据从一种格式转换为另一种格式,因此用户很容易处理。对于第二个选项,格式化不是永久性的,每次打开文件时都必须进行格式化。这对用户来说似乎不太方便,但在某些情况下仍然可能有用。

【讨论】:

以上是关于如何防止 Excel 从时间戳中删除秒?的主要内容,如果未能解决你的问题,请参考以下文章

从时间戳中丢弃毫秒部分

如何删除时间戳中的 freq='W-FRI' 部分

如果时间戳不存在,有没有办法将秒添加到时间戳中?

如何通过时间戳排序从时间戳中获取月份和年份的唯一记录

如何使用 pyspark 从 aws 胶水的时间戳中提取年份

从时间戳中提取时间?