Pandas [.dt] 属性 对比 to_datetime
Pandas [.dt] property vs to_datetime
这个问题的目的是让大家理解 .dt
和 pd.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
这个问题的目的是让大家理解 .dt
和 pd.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