我有一个名为'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
答案 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.floor
或pd.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
系列转换为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]