【问题标题】:Python date Time for ExcelExcel的Python日期时间
【发布时间】:2018-09-20 21:23:48
【问题描述】:

如何通过 Python 将 Excel 中的以下日期转换为浮点值。

问题说明:我有一个日期数据,其中输入了日期,但用户和用户使用不同的单元格格式输入日期。例如,有些使用单元格格式为dd-yy-yyyy,有些在 Excel 单元格中使用 mm-dd-yyyy,同时输入数据(实际上用户在他们的文件中使用了不同的 excel 格式的日期)。当我尝试合并日期时,发现日期随机采用不同的单元格格式。在 excel 中,我可以复制日期列并将所有内容作为值粘贴到单独的列中,它给我的整数值是相同的,无论单元格中使用的格式和格式。然后将单一格式应用于所有值并以相同格式获取我的所有日​​期。

但是,我想在 Python 中创建一个脚本,其中首先:日期的所有不同单元格格式都转换为浮点值(就像我在 excel 中所做的那样),然后我会将所有日期转换回标准格式,即dd/mm/yyyy

Formet 日期格式 数值中的日期 在 excle 中重新格式化为 dd-mm-yyyy 格式 1 30-08-2018 dd-mm-yyyy 43342.51551 30-08-2018 格式 2 08-30-2018 mm-dd-yyyy 43342.51551 30-08-2018

【问题讨论】:

  • “我想做一个脚本” - 那么你做了这个脚本吗?或者您的意思是您希望有人在这里制作脚本?
  • 您有什么方法可以判断日期是 DD-MM-YYYY 还是 MM-DD-YYYY? Excel 文件的其他列中是否有任何指标?
  • 1.我不明白这个问题,你的问题到底是什么? 2. 不知道怎么解释的日期怎么转换成浮点数?
  • 是rdimaio,在excel中,我们可以看到单元格的日期显示格式,但是我正在寻找一种通过python找到它的方法,python可以告诉我单元格的日期显示格式是dd-mm-yyyy 或 mm-dd-yyy

标签: python


【解决方案1】:

没有脚本可以告诉您,03-05-2014 是指 5 月 3 日还是 3 月 5 日。不是神做不了的,你做不到的。

只有线索:

  • 如果某个值由四位数字组成,则为年份。

  • 如果有一个值大于十二,可以说这个值一定是日(或年)

  • 如果同一用户有多个日期值,您可以假定他或她始终保持一种格式并从另一个字段推断格式。

【讨论】:

  • 谢谢,但是在浮点数中转换任何日期格式都会告诉 excel 中的真实日期,这就是我问这个问题的原因
  • 有趣:Excel 将如何做到这一点?
  • 但我相信您在 Excel 中的某个地方设置了日期符合的格式,对吧?
  • 在 excel 中,所有格式都转换为 float 中的标准值,例如
  • 当然,但是你告诉excel你的8是月还是日。我相信 3 月 5 日或 5 月 3 日会有不同的浮点数,关键是你不知道如何告诉 Excel 你的 3 是月还是日。还是我错过了什么?
【解决方案2】:

在回答您的问题之前,您需要了解以下特殊术语:

Excel 中的浮点值日期

在excel中实际上就是所谓的Serial Date

回答

假设您用于读取 excel 文件的框架不会根据其格式转换单元格值。

实现这一点最简单的方法是首先手动将具有日期值的单元格格式设置为数字格式以获取序列日期值。

然后,当您读取 excel 文件时,您可以使用以下方法将 serial date 转换为 datetime 对象:

def serial_to_datetime(serial):
    """ Convert excel serial date to :class:`datetime` """
    # 30/12/1899 used instead of 01/01/1900 in order to offset 2 days due to, serial counting & excel leap year bug
    dt = datetime.fromordinal(datetime(1899, 12, 30).toordinal() + int(serial))
    h, r = divmod(serial % 1 * 24, 1)
    m, r = divmod(r * 60, 1)
    return dt.replace(hour=int(h), minute=int(m), second=int(r * 60))

现在,您可以使用 datetime.strftime 转换为您想要的任何格式

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    相关资源
    最近更新 更多