【问题标题】:How to convert date format when reading from Excel - Python从 Excel 读取时如何转换日期格式 - Python
【发布时间】:2025-12-06 13:10:02
【问题描述】:

我正在阅读 Excel 工作表。标题是月-年格式的日期,我想保持这种方式。但是当它读取它时,它会将格式更改为“2014-01-01 00:00:00”。我写了以下 peice 来修复它,但不起作用。

import pandas as pd
import numpy as np
import datetime
from datetime import date
import time
file_loc = "path.xlsx"
df = pd.read_excel(file_loc, index_col=None, na_values=['NA'], parse_cols = 37)
df.columns=pd.to_datetime(df.columns, format='%b-%y')

什么都没做。在另一次尝试中,我做了以下事情:

df.columns = datetime.datetime.strptime(df.columns, '%Y-%m-%d %H:%M:%S').strftime('%b-%y')

返回must be str, not datetime.datetime 错误。我不知道如何让它逐个单元格地读取字符串!

这是一个示例数据:

NaT 11/14/2015 00:00:00 12/15/2015 00:00:00 1/15/2016 00:00:00
A   5                   1                   6
B   6                   3                   3   

我的主要问题是它无法将其识别为标题,例如,df['11/14/2015 00:00:00'] 会返回 keyError

感谢任何帮助。

更新:这是一张照片来说明我不断得到的东西!方框 6 是 apply 的实现,方框 7 是我的数据的样子。

【问题讨论】:

  • @EdChum,我在这里发布了日期格式的问题。谢谢。
  • 我认为是因为您的剥离不正确:11/14/2015 00:00:00 应该是 '%Y/%m/%d %H:%M:%S',但不是在月份和日期之间使用 '-' 符号
  • @Anton Protopopov,我用/ 尝试过,但错误仍然显示must be str, not Index

标签: python datetime pandas type-conversion datetime-format


【解决方案1】:
import datetime
df = pd.DataFrame({'data': ["11/14/2015 00:00:00", "11/14/2015 00:10:00", "11/14/2015 00:20:00"]})
df["data"].apply(lambda x: datetime.datetime.strptime(x, '%m/%d/%Y %H:%M:%S').strftime('%b-%y'))

编辑

如果您想使用df.columns,您可以使用map 函数:

df.columns = list(map(lambda x: datetime.datetime.strptime(x, '%m/%d/%Y %H:%M:%S').strftime('%b-%y'), df1.columns))

如果你使用的是 python 3.x,你需要 list 因为它默认是迭代器。

【讨论】:

  • 您可以对 pd.Series 数据框使用 apply 方法
  • 谢谢,但没用,我在问题正文中附上了一张图片以显示代码和结果。下一个问题是我的数据不在列中,是表头。
  • 因此您可以使用pd.Series(df.columns)df.columns 转换为pd.Series,然后使用apply 方法。查看最后一次编辑
  • list 成功了!我只需要将内部 x 更改为 str(x) 以避免出现 must be str, not Timestamp 错误。谢谢。
  • 但问题是当我打印数据框时,它仍然显示旧格式。
【解决方案2】:

问题可能是excel中的数据不是以你认为的字符串格式存储的。也许它存储为一个数字,并在 Excel 中显示为日期字符串。

Excel 有时会在一个纪元之后使用毫秒来存储日期。 检查您在 df 数组中看到的实际值。

这说明了什么?

from pprint import pprint
pprint(df)

【讨论】:

  • 在excel中,第一个单元格是1/1/2014,然后每个单元格是=previous cell +31pprint(df) 打印 2015-11-14 00:00:00.