[英]Replace time in datetime column in Pandas
如何替换日期时间格式的 pandas 列中的特定时间? 我需要在23:52:00
中用23:59:59
替换df.end
的所有时间
data = [['site a', '2021-03-05 23:52:00'],
['site a', '2021-03-06 12:00:00'],
['site b', '2021-04-08 23:00:00'],
['site c', '2021-04-09 23:52:00']]
df = pd.DataFrame(data, columns = ['id', 'end'])
df['end'] = pd.to_datetime(df['end'], infer_datetime_format=True)
使用这个 where 语句,时间都不会改变。 这是由于以下语句: df['end'].dt.time == '23:52:00'
np.where(df['end'].dt.time == '23:52:00', (df['end'].dt.normalize() + pd.Timedelta('23:59:59')), df['end'])
Out[74]: array(['2021-03-05T23:52:00.000000000', '2021-03-06T12:00:00.000000000',
'2021-04-08T23:00:00.000000000', '2021-04-09T23:52:00.000000000'],
dtype='datetime64[ns]')
您正在比较错误的类型,将时间转换为刺痛:
mask = df['end'].dt.time.astype(str) == '23:52:00'
要替换找到的值:
import datetime
df.loc[mask, 'end'] = df[mask]['end'] + datetime.timedelta(minutes=7)
将“分钟=7”替换为您想要的差异。
如果您更喜欢使用datetime
对象进行比较,您可以这样做(无需使用np.where
):
mask = df['end'].dt.time == pd.to_datetime('23:52:00').time()
df.loc[mask, 'end'] = df['end'].dt.normalize() + pd.Timedelta('23:59:59')
你必须使用日期时间而不是字符串。 pandas.to_datetime('23:52:00')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.