Pandas [.dt] 属性 对比 to_datetime

Pandas [.dt] property vs to_datetime

这个问题的目的是让大家理解 .dtpd.to_datetime

之间的细微差别

我想了解哪种方法 suited/preferred 是否可以用作事实上的方法以及两者之间的其他差异

values = {'date_time':  ['20190902093000','20190913093000','20190921200000'],
          }
          
df = pd.DataFrame(values, columns = ['date_time'])

df['date_time'] = pd.to_datetime(df['date_time'], format='%Y%m%d%H%M%S')

>>> df
            date_time
0 2019-09-02 09:30:00
1 2019-09-13 09:30:00
2 2019-09-21 20:00:00

Using .dt

df['date'] = df['date_time'].dt.date

>>> df
            date_time        date
0 2019-09-02 09:30:00  2019-09-02
1 2019-09-13 09:30:00  2019-09-13
2 2019-09-21 20:00:00  2019-09-21

>>> df.dtypes
date_time    datetime64[ns]
date                 object
dtype: object

>>> df.date.values
array([datetime.date(2019, 9, 2), datetime.date(2019, 9, 13),
       datetime.date(2019, 9, 21)], dtype=object)

使用 .dt ,即使元素是单独的 datetime ,在 'DataFrame` 中被推断为 object 有时适合 但主要是它会导致很多问题,隐式转换是不可避免的

Using pd.to_datetime

df['date_to_datetime'] = pd.to_datetime(df['date'],format='%Y-%m-%d')

>>> df.dtypes
date_time           datetime64[ns]
date                        object
date_to_datetime    datetime64[ns]

>>> df.date_to_datetime.values
array(['2019-09-02T00:00:00.000000000', '2019-09-13T00:00:00.000000000',
       '2019-09-21T00:00:00.000000000'], dtype='datetime64[ns]')

使用 pd.to_datetime ,本机 returns 一个 datetime64[ns] 数组并在 DataFrame 中推断相同,根据我的经验,这在处理时是一致的并被广泛使用dates 使用 pandas

我知道 pandas 中不存在本机 Date dtype 并且围绕 datetime64[ns]

这两个概念完全不同。

pandas.to_datetime() 是一个可以接受各种输入并将其转换为 pandas 日期时间索引的函数。例如:

dates = pd.to_datetime([1610290846000000000, '2020-01-11', 'Jan 12 2020 2pm'])
print(dates)
# DatetimeIndex(['2021-01-10 15:00:46', '2020-01-11 00:00:00',
#                '2020-01-12 14:00:00'],
#               dtype='datetime64[ns]', freq=None)

pandas.Series.dt 是 pandas 系列上的一个接口,可让您方便地访问存储为 pandas 日期时间的数据的操作。例如:

x = pd.Series(dates)
print(x.dt.date)
# 0    2021-01-10
# 1    2020-01-11
# 2    2020-01-12
# dtype: object

print(x.dt.hour)
# 0    15
# 1     0
# 2    14
# dtype: int64