我有一個大型(> 1 百萬行)資料集,其中包含日期時間時間戳。我想看看全天可能出現的趨勢。因此,如果我這樣做,則開始:print(df['timestamp'])它會將我的資料顯示為:
0 2014-01-01 13:11:50.3
1 2011-02-13 04:12:45.0
名稱:時間戳,長度:1000000,資料型別:datetime64[ns] /
但是,我不想要那里的日期,因為我只想繪制全天的趨勢,而不關心今天是哪一天。所以我做了這行代碼:
df['timestamp'] = pd.Series([val.time() for val in df['timestamp']]),這給了我所需的唯一時間戳資料,但將 dtype 作為“物件”回傳,我無法繪制。例如,當我嘗試使用 Seaborn: 時sns.lineplot(df['timestamp'], df['Task_Length']),我收到錯誤“TypeError: Invalid object type at position 0”。
但是,如果我只是做同樣的事情sns.lineplot(df['timestamp'], df['Task_Length']),沒有切斷日期的中間步驟,將其保留為 datetime64[ns] 物件,而不是通用的“物件”資料型別;它的情節很好。然而,這會導致一個跨越多年的情節,而我只想看到一天中的時間趨勢。
為清楚起見,這是一個 pandas 資料框,其中每一行都有一個任務發生,通常我可以將一列稱為“TaskName”,并且每列都與前面解釋的“時間戳”相關聯,我想使用任何型別的Seaborn 繪圖分析日常趨勢,例如一天中不同時間發生的不同任務型別,而不關心一年中的幾天。謝謝你的幫助。
編輯* 更新我嘗試過的另一件事:使用可以繪制的原始 datetime64[ns] 物件,我嘗試這樣做sns.lineplot(df['timestamp'].dt.time, df['Task_Length'])時給出了與添加代碼行以截止日期時相同的錯誤。無法理解為什么 Seaborn 不喜歡時間組件。
uj5u.com熱心網友回復:
這對我有用。不同之處在于將“時間戳”列從日期時間轉換為時間。
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.DataFrame([['2014-01-01 13:11:50.3',10],['2011-02-13 04:12:45.0',15]], columns=['timestamp','Task_Length'])
df['timestamp'] = pd.to_datetime(df['timestamp']).dt.strftime('%H:%M:%S')
sns.lineplot(df['timestamp'], df['Task_Length'])
plt.show()
有關詳細資訊,請參閱此問題 在 seaborn 中繪制 datetime.time
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/432150.html
