从熊猫列中的datetime.datetime中删除时间

时间:2018-07-11 14:01:37

标签: python pandas datetime

我有一个名为'date'的熊猫专栏 其值和类型类似于2014-07-30 00:00:00 <class 'datetime.datetime'>。 我想从日期中删除时间。最终结果为datetime.datetime格式的“ 2014-07-30”。

我尝试了很多解决方案,例如-

df['PSG Date '] = df['PSG Date '].dt.date

但是给我错误-

AttributeError: Can only use .dt accessor with datetimelike values

3 个答案:

答案 0 :(得分:0)

我认为首先需要to_datetime,对于date,需要使用dt.date

df['PSG Date '] = pd.to_datetime(df['PSG Date '], errors='coerce').dt.date

如果需要没有时间的日期时间,请使用dt.floor

df['PSG Date '] = pd.to_datetime(df['PSG Date '], errors='coerce').dt.floor('d')

答案 1 :(得分:0)

您可以通过调用对象的datetime.datetime方法将date time.date转换为.date()。例如

 current_datetime = datetime.datetime.now()
 date_only = current_datetime.date()

答案 2 :(得分:0)

首先,您应该从datetime系列开始;如果您没有,请使用pd.to_datetime强制进行此转换。这将允许向量化的计算:

df = pd.DataFrame({'col': ['2014-07-30 12:19:22', '2014-07-30 05:52:05',
                           '2014-07-30 20:15:00']})

df['col'] = pd.to_datetime(df['col'])

接下来,请注意,您无法从Pandas的datetime系列中抽出时间。根据定义,datetime系列将同时包含“日期”和“时间”部分。

标准化时间

您可以使用pd.Series.dt.floorpd.Series.dt.normalize将时间部分重置为00:00:00

df['col_floored'] = df['col'].dt.floor('d')
df['col_normalized'] = df['col'].dt.normalize()

print(df['col_floored'].iloc[0])     # 2014-07-30 00:00:00
print(df['col_normalized'].iloc[0])  # 2014-07-30 00:00:00

转换为datetime.date指针

您可以将datetime系列转换为object系列,其中datetime.date个对象代表日期:

df['col_date'] = df['col'].dt.date
print(df['col_date'].iloc[0])        # 2014-07-30

由于这些内容未保存在连续的内存块中,因此不会df['col_date']对向量进行矢量化处理。

如何检查差异

检查dtype对于我们得出的系列很有用。请注意,“删除”时间的一个选项涉及将系列转换为object

由于将由指向datetime.date对象的指针而不是连续内存块中的数据的指针组成的计算,因此不会进行矢量化处理。

print(df.dtypes)

col               datetime64[ns]
col_date                  object
col_floored       datetime64[ns]
col_normalized    datetime64[ns]