[英]pandas datetime columns problem and i don't know what i am missing
我是韓國學生
請理解英語很尷尬
我想讓列 datetime > year,mounth.... ,second
train = pd.read_csv('input/Train.csv')
DateTime 看起來像這樣(這是 head(20),我刪除了其他容易看到的列)
datetime
0 2011-01-01 00:00:00
1 2011-01-01 01:00:00
2 2011-01-01 02:00:00
3 2011-01-01 03:00:00
4 2011-01-01 04:00:00
5 2011-01-01 05:00:00
6 2011-01-01 06:00:00
7 2011-01-01 07:00:00
8 2011-01-01 08:00:00
9 2011-01-01 09:00:00
10 2011-01-01 10:00:00
11 2011-01-01 11:00:00
12 2011-01-01 12:00:00
13 2011-01-01 13:00:00
14 2011-01-01 14:00:00
15 2011-01-01 15:00:00
16 2011-01-01 16:00:00
17 2011-01-01 17:00:00
18 2011-01-01 18:00:00
19 2011-01-01 19:00:00
然后我編寫這段代碼來查看每一列(年、月、日、小時、分鍾、秒)
train['year'] = train['datetime'].dt.year
train['month'] = train['datetime'].dt.month
train['day'] = train['datetime'].dt.day
train['hour'] = train['datetime'].dt.hour
train['minute'] = train['datetime'].dt.minute
train['second'] = train['datetime'].dt.seond
和這樣的錯誤
AttributeError: 只能使用帶有 datetimelike 值的 .dt 訪問器
請幫幫我ㅠㅅㅠ
請注意,默認情況下read_csv只能推斷數字和 boolean 列的列類型。 除非明確指定(例如傳遞轉換器或dtype參數),否則所有其他輸入情況都保留為字符串,並且此類列的pandasonic類型為object 。
就在你的情況下發生了這種情況。 因此,由於此列是object類型,因此您不能在其上調用dt訪問器,因為它僅適用於datetime類型的列。
實際上,在這種情況下,您可以采取以下方法:
為此,您可以運行:
wrk = df['datetime'].str.split(r'[- :]', expand=True).astype(int)
wrk.columns = ['year', 'month', 'day', 'hour', 'minute', 'second']
df = df.join(wrk)
del wrk
df['datetime'] = pd.to_datetime(df['datetime'])
請注意,我添加了astype(int) 。 否則,這些列將保留為object (實際上是string )類型。
或者也許不再需要這個原始列(因為您已經提取了所有日期/時間組件)? 在這種情況下,刪除此列而不是轉換它。
最后一個提示: datetime被用作類型名稱(帶有各種結尾)。 因此,最好在此處使用其他名稱,至少在字符大小寫上有所不同,例如DateTime 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.