我有以下日期,我尝试了以下代码,
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'
答案 0 :(得分:3)
pd.to_datetime
会返回datetime
个对象,其中second
为属性:您可以做的事情不多。您可以将second
设置为0
,但该属性仍然在此处,标准表示仍将包含尾随':00'
。
您需要对replace
的每个元素应用df
:
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_date_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
答案 1 :(得分:1)
您可以使用timedelta减去秒数:
import datetime
d = datetime.datetime.now() #datetime including seconds
without_seconds = d - datetime.timedelta(seconds=d.second)
答案 2 :(得分:1)
您可以先使用转换为numpy values
,然后通过强制转换为seconds
来截断<M8[m]
:
df = pd.DataFrame({'start_date_time': ["2016-05-19 08:25:23","2016-05-19 16:00:45"]})
print (df)
start_date_time
0 2016-05-19 08:25:23
1 2016-05-19 16:00:45
df['start_date_time'] = pd.to_datetime(df['start_date_time'])
df['start_date_time'] = df['start_date_time'].values.astype('<M8[m]')
print (df)
start_date_time
0 2016-05-19 08:25:00
1 2016-05-19 16:00:00
另一种解决方案是从second
创建timedelta
系列,并使用
print (pd.to_timedelta(df['start_date_time'].dt.second, unit='s'))
0 00:00:23
1 00:00:45
Name: start_date_time, dtype: timedelta64[ns]
df['start_date_time'] = df['start_date_time'] -
pd.to_timedelta(df['start_date_time'].dt.second, unit='s')
print (df)
start_date_time
0 2016-05-19 08:25:00
1 2016-05-19 16:00:00
<强>计时强>:
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'])
#20000 rows
df = pd.concat([df]*10000).reset_index(drop=True)
In [181]: %timeit df['start_date_time'] = df['start_date_time'] - pd.to_timedelta(df['start_date_time'].dt.second, unit='s')
100 loops, best of 3: 5.83 ms per loop
In [182]: %timeit df['start_date_time1'] = df['start_date_time'].values.astype('<M8[m]')
The slowest run took 4.21 times longer than the fastest. This could mean that an intermediate result is being cached.
1000 loops, best of 3: 638 µs per loop
In [183]: %timeit df['start_date_time2'] = df['start_date_time'].apply(lambda t: t.replace(second=0))
10 loops, best of 3: 83.4 ms per loop
答案 3 :(得分:1)
HTML代码:
<输入type =“ time” class =“ form-control” value =“” name =“ meeting_time”必需/>
Python Django代码:
meeting_time = request.POST ['meeting_time']#像your_time =“ 12:35:00”
get_time = Meeting_time.strftime(“%H:%M”)
结果是:
get_time =“ 12:35”
答案 4 :(得分:1)
这是从日期时间中删除秒的一种非常简单的方法:
from datetime import datetime
print(str(datetime.today())[:16])
输出:
2021-02-14 21:30
它有效地将时间戳转换为文本并且只留下前 16 个符号。 只是不要在所有这些括号中迷失自己;)
答案 5 :(得分:0)
用以下内容拍摄:
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 2016-05-19 08:25 Name: date, dtype: object
答案 6 :(得分:0)
正如你提到的那样删除所以我假设你不希望结果中的秒或微秒。如果是这种情况,那么下面的内容可能有所帮助:
datetime_variable.strftime("'%Y-%m-%d %H:%M'")
如果你的日期时间是字符串,那么你可以在datetime obj中转换它:
from dateutil import parser
datetime_variable = parser.parse(str_datetime_var)
datetime_variable.strftime("'%Y-%m-%d %H:%M'")
答案 7 :(得分:0)
首先将String转换为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
答案 8 :(得分:0)
将字符串转换为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'>)
答案 9 :(得分:-1)
这是时间模块而不是日期时间模块,但可能是您正在寻找的......
import time
X = time.strftime("%H:%M")
print(X)
或你的秒数
import time
X = time.strftime("%H:%M:%S")
print(X)
如果您要投票,请解释原因