5 回答

TA貢獻1795條經驗 獲得超7個贊
自己實現的一種方法是:
def hour_of_year(dt): beginning_of_year = datetime.datetime(dt.year, 1, 1, tzinfo=dt.tzinfo) return (dt - beginning_of_year).total_seconds() // 3600
這首先創建一個新的 datetime 對象來表示年初。然后我們計算自年初以來的時間(以秒為單位),除以 3600 并取整數部分以獲得自年初以來經過的完整小時數。
請注意,使用對象days
的屬性timedelta
將僅返回自年初以來的完整天數。

TA貢獻1799條經驗 獲得超6個贊
您可以使用timedelta:
import datetime
dt = datetime.datetime(2019, 1, 3, 00, 00, 00)
dt2 = datetime.datetime(2019, 1, 1, 00, 00, 00)
print((dt-dt2).days*24)
輸出:
48

TA貢獻1725條經驗 獲得超8個贊
所有三個函數,重用它們的代碼。
import datetime
def minutes_of_year(dt):
return seconds_of_year(dt) // 60
def hours_of_year(dt):
return minutes_of_year(dt) // 60
def seconds_of_year(dt):
dt0 = datetime.datetime(dt.year, 1, 1, tzinfo=dt.tzinfo)
delta = dt-dt0
return int(delta.total_seconds())
編輯以考慮可能的時區信息。
或者:子類 datetime,以便在以后的項目中更容易重用:
import datetime
class MyDateTime(datetime.datetime):
def __new__(cls, *args, **kwargs):
return datetime.datetime.__new__(cls, *args, **kwargs)
def minutes_of_year(self):
return self.seconds_of_year() // 60
def hours_of_year(self):
return self.minutes_of_year() // 60
def seconds_of_year(self):
dt0 = datetime.datetime(self.year, 1, 1, tzinfo=self.tzinfo)
delta = self-dt0
return int(delta.total_seconds())
# create and use like a normal datetime object
dt = MyDateTime.now()
# properties and functions of datetime still available, of course.
print(dt.day)
# ... and new methods:
print(dt.hours_of_year())

TA貢獻1826條經驗 獲得超6個贊
我有一個數據框 DF,它的“時間戳”列的類型為 datetime64[ns]。
列時間戳如下所示:
DF['Timestamp']:
0 2022-01-01 00:00:00
1 2022-01-01 01:00:00
2 2022-01-01 02:00:00
3 2022-01-01 03:00:00
4 2022-01-01 04:00:00
...
8755 2022-12-31 19:00:00
8756 2022-12-31 20:00:00
8757 2022-12-31 21:00:00
8758 2022-12-31 22:00:00
8759 2022-12-31 23:00:00
Name: Timestamp, Length: 8760, dtype: datetime64[ns]
我以這種方式提取“一年中的小時”:
DF['Year'] = DF['Timestamp'].astype('M8[Y]')
DF['DayOfYear'] = (DF['Timestamp'] - DF['Year']).astype('timedelta64[D]')
DF['Hour'] = DF['Timestamp'].dt.hour + 1
DF['HourOfYear'] = DF['DayOfYear'] * 24 + DF['Hour']
首先,它從時間戳中提取年份。
接下來,它根據天數(換句話說,一年中的某一天)創建從年初到該時間戳的時間增量。
然后它從時間戳中提取小時。
最后,它使用該公式計算一年中的小時。
最后看起來像這樣:
DF:
Timestamp ... HourOfYear
0 2022-01-01 00:00:00 ... 1.0
1 2022-01-01 01:00:00 ... 2.0
2 2022-01-01 02:00:00 ... 3.0
3 2022-01-01 03:00:00 ... 4.0
4 2022-01-01 04:00:00 ... 5.0
...
8755 2022-12-31 19:00:00 ... 8756.0
8756 2022-12-31 20:00:00 ... 8757.0
8757 2022-12-31 21:00:00 ... 8758.0
8758 2022-12-31 22:00:00 ... 8759.0
8759 2022-12-31 23:00:00 ... 8760.0
[8760 rows x 6columns]

TA貢獻1803條經驗 獲得超3個贊
你可以寫一個自定義函數
def get_time_of_year(dt, type = 'hours_of_year'):
intitial_date = datetime(dt.year, 1,1, 00, 00, 00)
duration = dt - intitial_date
days, seconds = duration.days, duration.seconds
hours = days * 24 + seconds // 3600
minutes = (seconds % 3600) // 60
if type == 'hours_of_year':
return hours
if type == 'days_of_year':
return days
if type == 'seconds_of_year':
return seconds
if type == 'minuts_of_year':
return minutes
測試功能
get_time_of_year(dt, 'hours_of_year')
#>>48
添加回答
舉報