从pandas中的date&time变量中删除时间?

gojuced7  于 2023-09-29  发布在  其他
关注(0)|答案(4)|浏览(94)

我有一个由300 k记录组成的变量,日期如下所示
2015-02-21 12:08:51
从那一天起,我想删除时间
日期变量的类型为pandas.core.series.series
这是我试过的方法

from datetime import datetime,date
date_str = textdata['vfreceiveddate']  
format_string = "%Y-%m-%d"
then = datetime.strftime(date_str,format_string)

一些随机错误
在上面的代码中,textdata是我的datasetname,vfreceived date是一个由日期组成的变量
我如何编写代码来从日期时间中删除时间。

xjreopfe

xjreopfe1#

假设所有的datetime字符串都是类似的格式,那么只需使用to_datetime将它们转换为datetime,然后调用dt.date属性来获取日期部分:

In [37]:

df = pd.DataFrame({'date':['2015-02-21 12:08:51']})
df
Out[37]:
                  date
0  2015-02-21 12:08:51
In [39]:

df['date'] = pd.to_datetime(df['date']).dt.date
df
Out[39]:
         date
0  2015-02-21

编辑

如果你只想改变显示而不是dtype,你可以调用dt.normalize

In[10]:
df['date'] = pd.to_datetime(df['date']).dt.normalize()
df

Out[10]: 
        date
0 2015-02-21

你可以看到dtype仍然是datetime

In[11]:
df.dtypes

Out[11]: 
date    datetime64[ns]
dtype: object
eqqqjvef

eqqqjvef2#

您正在调用datetime.datetime.strftime,它需要一个datetime.datetime示例作为其第一个参数,因为它是一个未绑定方法;但是你传递给它的是一个字符串而不是一个datetime示例,这就是明显的错误。
如果您想要的结果是字符串级别,那么您可以纯粹地在字符串级别工作;以你给予的数据为例,date_str.split()[0]就是你需要的2015-02-21字符串。
或者,你可以使用datetime,但是你需要先解析字符串,而不是格式化它--因此,strptime,* 不是 * strftime:

dt = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S')
date = dt.date()

如果你想要的是一个datetime.date对象(但是如果你想要的只是日期的字符串形式,这样的方法可能会“矫枉过正”:-)。

ss2ws0br

ss2ws0br3#

简笔
date.strftime("%d-%m-%Y")将删除Hour min & sec

6fe3ivhb

6fe3ivhb4#

Pandas不支持Pandas-native“date”类型。
这里的例子展示了.dt.date的使用,它将生成Python Date对象,并构造一系列指向这些日期的对象指针。现在,您已经增加了存储,并降低了对数据进行任何矢量化操作的可能性。此外,没有一个Pandas类型检查器会将该列识别为任何类型的日期(或日期时间)列,因为它现在只是一个Python对象列,没有Pandas。
如果这是你想要的,那好吧。然而,我通常会选择 * 只 * 在序列化到另一种格式(csv,JSON等)之前这样做,这样它们就可以从没有时间组件输出中受益。
如果我真的想要一个DataFrame中的“日期”,我个人的选择是使用.astype("datetime64[D]");这是一个快速的方法来零出时间组件-它仍然存在真的,但我现在可以做我的所有日期相关的计算不受时间组件。

相关问题