Pandas dt 访问器 returns 日期和月份错误

Pandas dt accessor returns wrong day and month

我的 CSV 数据是这样的 -

Date      Time
1/12/2019 12:04AM
1/12/2019 12:09AM
1/12/2019 12:14AM

等等

我正在尝试使用 pandas 以下列方式读取此文件 -

import pandas as pd 
import numpy as np 



data = pd.read_csv('D 2019.csv',parse_dates=[['Date','Time']])
print(data['Date_Time'].dt.month)

当我尝试通过 dt 访问器访问年份时,打印出来的年份是 2019 年。 但是当我尝试打印日期或月份时,它是完全不正确的。对于月份,它以 1 开始,以 12 结束,此时正确的值应始终为 12。

一天从 12 开始到 31 结束,而它应该从 1 开始到 31 结束。该文件共有 8867 个条目。我哪里错了?

您需要检查数据框的数据类型并将“日期”列转换为日期时间

df["Date"] = pd.to_datetime(df["Date"])

之后您可以使用以下方式访问日、月或年:

dt.day
dt.month
dt.year

注意:确定日期格式(D/M/Y或M/D/Y)

完整代码

import pandas as pd 
import numpy as np 

data = pd.read_csv('D 2019.csv')
data["Date"] = pd.to_datetime(data["Date"])

print(data["Date"].dt.day)
print(data["Date"].dt.month)
print(data["Date"].dt.year)

尝试分配 format 参数 pd.to_datetime

df = pd.read_csv('D 2019.csv')
df["Date_Time"] = pd.to_datetime(df["Date_Time"], format='%d/%m/%Y %H:%M%p')

默认格式为 MM/DD,而您的格式为 DD/MM。

最简单的解决方案是设置read_csvdayfirst参数:

dayfirst : DD/MM format dates, international and European format (default False)

data = pd.read_csv('D 2019.csv', parse_dates=[['Date', 'Time']], dayfirst=True)
#                                                                -------------
>>> data['Date_Time'].dt.month
# 0    12
# 1    12
# 2    12
# Name: Date_Time, dtype: int64