【问题标题】:Pandas mistake when reading date from excel file从 excel 文件中读取日期时 Pandas 错误
【发布时间】:2021-10-30 09:31:52
【问题描述】:

从 Excel 文件中读取日期时出现 Pandas 错误。 我正在使用以下命令创建数据框。

df = pd.read_excel("report_file.xls", parse_dates=['operation_date'])
df.dtypes
operation_date  datetime64[ns]

一切看起来都不错。但是在分析数据框时,发现了一个错误。天数与月数匹配后,pandas 搞错了,将日期和月份颠倒过来。例如,10 月份的数据看起来像这样。

45 2021-10-13 11:50:34  ...                       329.97
46 2021-10-13 11:41:56  ...                       323.50
47 2021-10-13 11:41:55  ...                      2600.00
48 2021-10-10 02:05:13  ...                      1479.45
49 2021-09-10 20:22:01  ...                        40.00
50 2021-09-10 19:39:39  ...                        42.64
51 2021-09-10 19:39:39  ...                       350.00
52 2021-06-10 20:11:48  ...                        20.00
53 2021-06-10 13:34:25  ...                         1.96

您可以在月份的位置看到 2021-10-10 之后的天数。

【问题讨论】:

  • XLS 文件使用什么格式的日期?这听起来像是一个本地化问题:日期有多种书写方式(在美国是月-日-年),这也是采用年-月-日作为明确格式的原因之一。
  • XLS 使用日-月-年格式

标签: python excel pandas datetime64


【解决方案1】:

尝试显式传递日期格式,如下所示:

pd.read_excel(
    "report_file.xls",
    parse_dates=['operation_date'],
    date_parser=lambda x: pd.to_datetime(x, format='%Y-%m-%d %I:%M:%S')
)

【讨论】:

  • 不幸的是它对我不起作用。我收到以下错误信息。 “ValueError:时间数据 29.10.2021 19:49:07 与指定的格式不匹配”​​。您输入了正确的路径以找到解决方案。
【解决方案2】:

我用了另一种方式。在我的 Excel 文件 (report_file.xls) 中,我有一列名称为 operation_date,表中的日期为 d-m-Y。

起初我从文件中制作了一个数据框:

df = pd.read_excel('report_file.xls')
df.dtypes   # operation_date   object

然后我将日期从字符串转换为日期时间:

df['operation_date'] = pd.to_datetime(df['operation_date'],dayfirst=True)
df.dtypes   #  operation_date      datetime64[ns]

在这种情况下,我描述的 2021-10-10 之后的日期没有问题。代码如下:

df = pd.read_excel("report_file.xls", parse_dates=['operation_date'])
45 2021-10-13 11:50:34  ...                       329.97
46 2021-10-13 11:41:56  ...                       323.50
47 2021-10-13 11:41:55  ...                      2600.00
48 2021-10-10 02:05:13  ...                      1479.45
49 2021-10-09 20:22:01  ...                        40.00
50 2021-10-09 19:39:39  ...                        42.64
51 2021-10-09 19:39:39  ...                       350.00
52 2021-10-06 20:11:48  ...                        20.00
53 2021-10-06 13:34:25  ...                         1.96

现在日期看起来是正确的。

【讨论】:

    猜你喜欢
    • 2023-02-20
    • 1970-01-01
    • 2023-03-26
    • 2020-05-27
    • 2020-01-09
    • 2021-02-02
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多