[英]Convert column 'day' to datetime with year specification
我有一個 dataframe ,其中包括一列已知年份的日期:
print (df)
year day time
0 2012 227 800
15 2012 227 815
30 2012 227 830
... ... ... ...
194250 2013 226 1645
194265 2013 226 1700
我試圖將日期數字轉換為日期時間%m-%d
使用:
import pandas as pd
df['day'] = pd.to_datetime(df['day'], format='%j').dt.strftime('%m-%d')
這使:
year day time
0 2012 08-15 800
15 2012 08-15 815
30 2012 08-15 830
... ... ... ...
194250 2013 08-14 1645
194265 2013 08-14 1700
但是這種轉換是不正確的,因為 2012 年的第 227 天是 8 月 14 日(08-14)。 我相信這個錯誤是由於轉換中缺少年份規范。
如何在轉換中指定年份以獲得 a) %Y-%m-%d
; b) %m-%d
; c) %Y-%m-%dT%H:%M
來自 dataframe 我有嗎?
謝謝
您可以轉換為字符串並輸入pd.to_datetime
,您可以使用正確的解析指令提供:
import pandas as pd
df = pd.DataFrame({'year': [2012, 2012], 'day' : [227, 228], 'time': [800, 0]})
df['datetime'] = pd.to_datetime(df.year.astype(str) + ' ' +
df.day.astype(str) + ' ' +
df.time.astype(str).str.zfill(4),
format='%Y %j %H%M')
df['datetime']
0 2012-08-14 08:00:00
1 2012-08-15 00:00:00
Name: datetime, dtype: datetime64[ns]
格式化為字符串只是通過dt
訪問器調用strftime
,例如
df['datetime'].dt.strftime('%Y-%m-%dT%H:%M')
0 2012-08-14T08:00
1 2012-08-15T00:00
Name: datetime, dtype: object
您可以嘗試將year
轉換為 datetime 類型,將day
轉換為 timedelta 類型,記住要偏移日期:
dates = pd.to_datetime(df['year'], format='%Y') + \
pd.to_timedelta(df['day'] -1, unit='D')
Output:
0 2012-08-14
15 2012-08-14
30 2012-08-14
194250 2013-08-14
194265 2013-08-14
dtype: datetime64[ns]
然后使用strftime
提取日期-月份:
df['day'] = dates.dt.strftime('%M-%D')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.