我有一個很長的資料框架,其中有年月日、十進制小時和年份(int格式)的分離列。我想將其轉換為日期時間并將其設定為資料框架的索引。 我找到了一種方法,但效率極低。是否有更好的方法來做同樣的事情?
我是這樣做的(用我的資料框架的5個第一個值):
我是這樣做的(用我的資料框架的5個第一個值)。
import numpy as np
import pandas as pd
import datetime
varr = np.random.rand(5)
dec_h = [1.96667, 1.97083, 1.97500, 1.97917, 1.98333]
doy = [154, 154, 154, 154]
year = [2021, 2021, 2021, 2021]
df = pd.DataFrame()
df['values'] = varr
df['decimal_hour'] = dec_h
df['day_of_year'] = doy
df['year'] = year
# 將十進制小時轉換為小時、分鐘、秒for i in range(0,len(df)>)。
hours.append(str(int(df.decimal_hour.values[i]) )
minutes.append(str(int((df.decimal_hour.values[i]*60) % 60) )
seconds.append(str(int((df.decimal_hour.values[i]*3600) % 60) ) )
# Transform doy to date[/span].
date1 = []
for i in range(0,len(df)>) 。
date1.append(datetime.datetime(df.year.values[i], 1, 1) datetime.timedelta(int(df.day_of_year.values[i]) - 1)
# 轉換為字串。
年 = []
月 = []
日 = []
for i in range(0,len(df) ):
year.append(str(date1[i].year))
month.append(str(date1[i].month))
day.append(str(date1[i].day))
# Concatenate everything[/span
date_time = []
for i in range(0,len(df) >)。
date_time.append(datetime.datetime. strptime(day[i] '/' month[i] '/' year[i] ' ' hours[i] ' 。 ' minutes[i] ' :' seconds[i] , "%d/%m/%Y %H:%M:%S" )
df.index = date_time
uj5u.com熱心網友回復:
你可以將day_of_year/year/decimal_hour轉換為資料時間,例如:
df["date"/span>] = df.apply(
lambda x: pd.to_datetime(x["year"], format="%Y")
pd.DateOffset(day=x["day_of_year"] - 1, hours=x["十進制_hour"])。
axis=1,
)
列印:
values decimal_hour day_of_year year date
2021-06-03 01:58:00 0.226575 1.96667 154 2021 2021-06-03 01:58:00.012
2021-06-03 01:58:14 0.356103 1.97083 154 2021 2021-06-03 01:58:14.988
2021-06-03 01:58:30 0.566151 1.97500 154 2021 2021-06-03 01:58:30.000
2021-06-03 01:58:45 0.851411 1.97917 154 2021 2021-06-03 01:58:45.012
2021-06-03 01:58:59 0.670402 1.98333 154 2021 2021-06-03 01:58:59.988
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/328884.html
標籤:
