簡體   English   中英

替換 Pandas 中日期時間列中的時間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM