簡體   English   中英

pandas 日期時間列問題,我不知道我錯過了什么

[英]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類型的列。

實際上,在這種情況下,您可以采取以下方法:

  • 不要指定此列的任何轉換(它將被解析為object ),
  • 日期時間列拆分為“部分”之后,使用str.split (所有 6 列都帶有一條指令),
  • 在生成的 DataFrame 中設置正確的列名,
  • 將它加入到原來的 DataFrame (然后下降),
  • 直到現在更改原始列的類型。

為此,您可以運行:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM