我在使用我創建的資料框時遇到了一些困難。資料框用于跟蹤每天的起床時間、第一餐、最后一餐(此處為 2ndMeal)和入睡時間(睡眠時間)。
在附件中,您可以看到初始資料框的樣子:
Unnamed: 1 Unnamed: 2 Unnamed: 3 Unnamed: 4 Unnamed: 5
0 2022-09-06 08:03:00 12:09:00 20:19:00 22:35:00
1 2022-09-07 07:30:00 12:20:00 20:35:00 00:10:00
2 2022-09-08 08:30:00 12:15:00 21:30:00 00:33:00
3 2022-09-09 08:56:00 11:00:00 23:00:00 02:00:00
我將列轉換為日期時間
test['Date'] = pd.to_datetime(df['Unnamed: 1'])
對于第一列和
test['WakeUp'] = pd.to_datetime(df['Unnamed: 2'], format='%H:%M:%S')
其余的(不能使用與第一列相同的代碼行,否則我會收到錯誤)并得到這個:
Date WakeUp 1stMeal 2ndMeal Sleep
0 2022-09-06 1900-01-01 08:03:00 1900-01-01 12:09:00 1900-01-01 20:19:00 1900-01-01 22:35:00
1 2022-09-07 1900-01-01 07:30:00 1900-01-01 12:20:00 1900-01-01 20:35:00 1900-01-01 00:10:00
2 2022-09-08 1900-01-01 08:30:00 1900-01-01 12:15:00 1900-01-01 21:30:00 1900-01-01 00:33:00
3 2022-09-09 1900-01-01 08:56:00 1900-01-01 11:00:00 1900-01-01 23:00:00 1900-01-01 02:00:00
我的問題是,我希望 WakeUp、1stMeal、2ndMeal 和 Sleep 的日期與 Date 列相同,但我無法做到……
此外,如果時間超過 00:00,我希望更改日期,以便顯示后天而不是同一天(即我在第 1 天的 7:00 醒來,但在 2 點睡覺:第 00 天 2)


我試圖提取時間并獨立使用它們但沒有成功(我不確定如何操縱它們)。
我曾嘗試使用:
pd.to_datetime(test['Date'].dt.date) pd.to_datetime(test['WakeUp'].dt.time)
但沒有成功。
由于日期不同,我期待睡眠時間不會有那么大的差距......
我在網上找到的所有幫助都是人們使用帶有日期和/或時間的資料框,但是作為 x 軸而不是作為 y 軸,這慢慢地讓人認為沒有解決方案......
uj5u.com熱心網友回復:
您可以在使用之前將第一列連接到另一列to_datetime,然后分別轉換第一列:
time_cols = df.columns[1:]
df[time_cols] = (df[time_cols].radd(df['Unnamed: 1'] ' ', axis=0)
.apply(pd.to_datetime)
)
df['Unnamed: 1'] = pd.to_datetime(df['Unnamed: 1'])
輸出:
Unnamed: 1 Unnamed: 2 Unnamed: 3 Unnamed: 4 Unnamed: 5
0 2022-09-06 2022-09-06 08:03:00 2022-09-06 12:09:00 2022-09-06 20:19:00 2022-09-06 22:35:00
1 2022-09-07 2022-09-07 07:30:00 2022-09-07 12:20:00 2022-09-07 20:35:00 2022-09-07 00:10:00
2 2022-09-08 2022-09-08 08:30:00 2022-09-08 12:15:00 2022-09-08 21:30:00 2022-09-08 00:33:00
3 2022-09-09 2022-09-09 08:56:00 2022-09-09 11:00:00 2022-09-09 23:00:00 2022-09-09 02:00:00
糾正睡眠
df.columns = ['Date', 'WakeUp', '1stMeal', '2ndMeal', 'Sleep']
df['Sleep'] = df['Sleep'].lt(df['WakeUp']).astype(int).mul(pd.DateOffset(days=1))
輸出:
Date WakeUp 1stMeal 2ndMeal Sleep
0 2022-09-06 2022-09-06 08:03:00 2022-09-06 12:09:00 2022-09-06 20:19:00 2022-09-06 22:35:00
1 2022-09-07 2022-09-07 07:30:00 2022-09-07 12:20:00 2022-09-07 20:35:00 2022-09-08 00:10:00
2 2022-09-08 2022-09-08 08:30:00 2022-09-08 12:15:00 2022-09-08 21:30:00 2022-09-09 00:33:00
3 2022-09-09 2022-09-09 08:56:00 2022-09-09 11:00:00 2022-09-09 23:00:00 2022-09-10 02:00:00
uj5u.com熱心網友回復:
問題的第二部分有點棘手,需要背景關系知識來解決。不能保證進入睡眠時間可以識別為第二天。是什么讓第二天 02:00 變成了 22:00?除非你知道沒有人能睡那么久,否則沒有辦法說出來。一種實用的方法是檢查一個合理的時間(比如 10:00),如果進入睡眠時間早于該時間,則使用https://pandas.pydata.org在日期上添加一天/pandas-docs/stable/reference/api/pandas.tseries.offsets.DateOffset.html
timestamp = timestamp DateOffset(day=1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/531766.html
上一篇:替換與df中特定日期相關的值?
下一篇:創建時間序列資料-Pandas
