Python 如何从datetime中删除秒数?

Python 如何从datetime中删除秒数?,python,pandas,datetime,dataframe,Python,Pandas,Datetime,Dataframe,我有以下日期,我尝试了以下代码 df['start_date_time'] = ["2016-05-19 08:25:00","2016-05-19 16:00:00","2016-05-20 07:45:00","2016-05-24 12:50:00","2016-05-25 23:00:00","2016-05-26 19:45:00"] df['start_date_time'] = pd.to_datetime([df['start_date_time']).replace(secon

我有以下日期,我尝试了以下代码

df['start_date_time'] = ["2016-05-19 08:25:00","2016-05-19 16:00:00","2016-05-20 07:45:00","2016-05-24 12:50:00","2016-05-25 23:00:00","2016-05-26 19:45:00"]
df['start_date_time'] = pd.to_datetime([df['start_date_time']).replace(second = 0)
我得到以下错误:

TypeError: replace() got an unexpected keyword argument 'second'

这是与时间模块,而不是日期时间模块,但可能是你的寻找

import time
X = time.strftime("%H:%M")
print(X)
还是你有时间

import time
X = time.strftime("%H:%M:%S")
print(X)
如果你要投反对票,请解释为什么

尝试一下:

df.index = df.index.map(lambda t: t.strftime('%Y-%m-%d %H:%M'))
如其中一条评论中所述,上述内容适用于日期不是字符串的情况。但是,如果它们是字符串,则只需从列表中的每个列表中剪切最后三个字符:

import pandas as pd

df = pd.DataFrame({'date': ["2016-05-19 08:25:00"]})

print(df['date'].map(lambda t: t[:-3]))
以上将输出:

将秒数设置为0
pd.to_datetime
将返回
datetime
对象,这些对象的属性为
second
:您对此无能为力。您可以将
second
设置为
0
,但该属性仍将在此处,并且标准表示法仍将包含一个尾随的
':00'

您需要在
df
的每个元素上应用
replace

import pandas as pd

df = pd.DataFrame({'start_date_time': ["2016-05-19 08:25:23","2016-05-19 16:00:45","2016-05-20 07:45:00","2016-05-24 12:50:00","2016-05-25 23:00:00","2016-05-26 19:45:00"]})
df['start_date_time'] = pd.to_datetime(df['start_date_time'])
df['start_date_time'] = df['start_date_time'].apply(lambda t: t.replace(second=0))

print(df)
#       start_date_time
# 0 2016-05-19 08:25:00
# 1 2016-05-19 16:00:00
# 2 2016-05-20 07:45:00
# 3 2016-05-24 12:50:00
# 4 2016-05-25 23:00:00
# 5 2016-05-26 19:45:00
第一次使用的
:23
:45
已被
:00
取代,但仍在打印

从字符串中删除
':00'
如果您只需要这些时间的字符串表示形式,并且仅将字符串解析为
datetime
对象,以便删除字符串末尾的
':00'
,则可以删除最后3个字符:

>>> "2016-05-19 08:25:00"[:-3]
'2016-05-19 08:25'
在初始化df['start\u date\u time']之前,您可以将其应用于列表中的每个元素:

>>> start_date_time = ["2016-05-19 08:25:00","2016-05-19 16:00:00","2016-05-20 07:45:00","2016-05-24 12:50:00","2016-05-25 23:00:00","2016-05-26 19:45:00"]
>>> map(lambda s: s[:-3], start_date_time)
['2016-05-19 08:25', '2016-05-19 16:00', '2016-05-20 07:45', '2016-05-24 12:50', '2016-05-25 23:00', '2016-05-26 19:45']
不带秒显示日期时间 如果要使用
datetime
对象,但不想显示秒数:

print(df['start_date_time'].apply(lambda t: t.strftime('%Y-%m-%d %H:%M')))
# 0    2016-05-19 08:25
# 1    2016-05-19 16:00
# 2    2016-05-20 07:45
# 3    2016-05-24 12:50
# 4    2016-05-25 23:00
# 5    2016-05-26 19:45
# Name: start_date_time, dtype: object

正如您所提到的,已删除,因此我假设您不希望结果中出现秒或微秒。如果是这种情况,则以下内容可能会有所帮助:

datetime\u变量.strftime(“%Y-%m-%d%H:%m”)

如果字符串中有datetime,则可以将其转换为datetime obj:

来自dateutil导入解析器的

datetime\u variable=parser.parse(str\u datetime\u var)

datetime\u变量.strftime(“%Y-%m-%d%H:%m”)


您可以使用时间增量减去秒数:

import datetime    
d = datetime.datetime.now() #datetime including seconds
without_seconds = d - datetime.timedelta(seconds=d.second)

首先将字符串转换为datetime对象,然后可以使用replace方法

from _datetime import *


df = dict()
df['start_date_time'] = ["2016-05-19 08:25:00",
                         "2016-05-19 16:00:00",
                         "2016-05-20 07:45:00",
                         "2016-05-24 12:50:00",
                         "2016-05-25 23:00:00",
                         "2016-05-26 19:45:00"]

for dt in df['start_date_time']:
    cur_dt = datetime.strptime(dt, '%Y-%m-%d %H:%M:%S')
    cur_dt = cur_dt.replace(second=0)
    print(cur_dt)

    cur_dt_without_second = cur_dt.strftime('%Y-%m-%d %H:%M')
    print(cur_dt_without_second)

-------------------
2016-05-19 08:25:00
2016-05-19 08:25
2016-05-19 16:00:00
2016-05-19 16:00
2016-05-20 07:45:00
2016-05-20 07:45
2016-05-24 12:50:00
2016-05-24 12:50
2016-05-25 23:00:00
2016-05-25 23:00
2016-05-26 19:45:00
2016-05-26 19:45

将字符串转换为datetime对象,然后对其进行操作

>>> x = ["2016-05-19 08:25:00","2016-05-19 16:00:00","2016-05-20 07:45:00","2016-05-24 12:50:00","2016-05-25 23:00:00","2016-05-26 19:45:00"]
>>> for i in x:
...  y = datetime.datetime.strptime(i, '%Y-%m-%d %H:%M:%S')
...  z = datetime.datetime.strftime(y, '%Y-%m-%d %H:%M')
...  print (y, type(y))
...  print (z, type(z))
... 
(datetime.datetime(2016, 5, 19, 8, 25), <type 'datetime.datetime'>)
('2016-05-19 08:25', <type 'str'>)
(datetime.datetime(2016, 5, 19, 16, 0), <type 'datetime.datetime'>)
('2016-05-19 16:00', <type 'str'>)
(datetime.datetime(2016, 5, 20, 7, 45), <type 'datetime.datetime'>)
('2016-05-20 07:45', <type 'str'>)
(datetime.datetime(2016, 5, 24, 12, 50), <type 'datetime.datetime'>)
('2016-05-24 12:50', <type 'str'>)
(datetime.datetime(2016, 5, 25, 23, 0), <type 'datetime.datetime'>)
('2016-05-25 23:00', <type 'str'>)
(datetime.datetime(2016, 5, 26, 19, 45), <type 'datetime.datetime'>)
('2016-05-26 19:45', <type 'str'>)
x=[“2016-05-19 08:25:00”,“2016-05-19 16:00:00”,“2016-05-20 07:45:00”,“2016-05-24 12:50:00”,“2016-05-25 23:00:00”,“2016-05-26 19:45:00”] >>>对于x中的i: ... y=datetime.datetime.StrTime(i,'%y-%m-%d%H:%m:%S') ... z=datetime.datetime.strftime(y,'%y-%m-%d%H:%m') ... 打印(y,类型(y)) ... 打印(z,类型(z)) ... (datetime.datetime(2016,5,19,8,25),) ('2016-05-19 08:25', ) (datetime.datetime(2016,5,19,16,0),) ('2016-05-19 16:00', ) (datetime.datetime(2016,5,20,7,45),) ('2016-05-20 07:45', ) (datetime.datetime(2016,5,24,12,50),) ('2016-05-24 12:50', ) (datetime.datetime(2016,5,25,23,0),) ('2016-05-25 23:00', ) (datetime.datetime(2016,5,26,19,45),) ('2016-05-26 19:45', )
解决方案,如果输出中需要日期时间

df = pd.DataFrame({'start_date_time': ["2016-05-19 08:25:23","2016-05-19 16:00:45"]})
df['start_date_time'] = pd.to_datetime(df['start_date_time'])
print (df)
       start_date_time
0  2016-05-19 08:25:23
1  2016-05-19 16:00:45
按分钟使用
T
Min

df['start_date_time'] = df['start_date_time'].dt.floor('T')

df['start_date_time'] = df['start_date_time'].dt.floor('Min')

您可以先使用convert to
numpy值
,然后通过转换为
HTML代码来截断

< input type="time" class="form-control" name="meeting_time" required /> 
结果是:

get_time = "12:35"

以下是从datetime中删除秒数的一种非常简单的方法:

from datetime import datetime 
print(str(datetime.today())[:16])
输出:

2021-02-14 21:30
它有效地将时间戳转换为文本,只留下前16个符号。
只是不要迷失在这些括号里;)

您可以尝试:
df.index.map(lambda t:t.strftime(“%Y-%m-%d%H:%m”)
您想要
string
还是
datetime
对象?如果您只需要字符串,可以使用regex
“:\d\d$”
删除尾随的秒数。我希望将其作为datetime对象签出此问题:密切相关:原始数据是字符串,因此我认为不可行。strftime会起作用,对吗?你说得对!我误解了这个问题;P添加了日期为strings的情况注意,您的更新没有写在评论中,而是写在我的答案中。没有否决,但是:这是回答问题的一大步,因为如果用户知道他/她在做什么,它将采取最后一步来获得正确答案。但请注意,这并不是对问题的直接回答,因为您使用的输入数据类型与OP所具有的数据类型之间没有相似之处。
print(df['start_date_time'].dt.strftime('%Y-%m-%d %H:%M'))
0    2016-05-19 08:25
1    2016-05-19 16:00
Name: start_date_time, dtype: object
print(df['start_date_time'].dt.strftime('%Y-%m-%d %H:%M:00'))
0    2016-05-19 08:25:00
1    2016-05-19 16:00:00
Name: start_date_time, dtype: object
< input type="time" class="form-control" name="meeting_time" required /> 
meeting_time = request.POST['meeting_time'] #Like your_time = "12:35:00"
get_time = meeting_time.strftime("%H:%M")
get_time = "12:35"
from datetime import datetime 
print(str(datetime.today())[:16])
2021-02-14 21:30