pd.to_datetime() 時間處理函數


pd.to_datetime()

因為不了解該段代碼意思:

# 不過要注意,數據里有時間出錯的格式,所以我們需要 errors='coerce'
data['used_time'] = (pd.to_datetime(data['creatDate'], format='%Y%m%d', errors='coerce') - 
                            pd.to_datetime(data['regDate'], format='%Y%m%d', errors='coerce')).dt.days

pandas.to_datetime將參數轉換為日期時間

官網的參數:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.to_datetime.html

pandas.to_datetime(arg: DatetimeScalar, errors: str = '...', dayfirst: bool = '...', yearfirst: bool = '...', utc: Optional[bool] = '...', format: Optional[str] = '...', exact: bool = '...', unit: Optional[str] = '...', infer_datetime_format: bool = '...', origin='...', cache: bool = '...') → Union[DatetimeScalar, ‘NaTType’][source]
pandas.to_datetime(arg: ‘Series’, errors: str = '...', dayfirst: bool = '...', yearfirst: bool = '...', utc: Optional[bool] = '...', format: Optional[str] = '...', exact: bool = '...', unit: Optional[str] = '...', infer_datetime_format: bool = '...', origin='...', cache: bool = '...') → ’Series’
pandas.to_datetime(arg: Union[List, Tuple], errors: str = '...', dayfirst: bool = '...', yearfirst: bool = '...', utc: Optional[bool] = '...', format: Optional[str] = '...', exact: bool = '...', unit: Optional[str] = '...', infer_datetime_format: bool = '...', origin='...', cache: bool = '...') → DatetimeIndex

格式如下:

#輸入下面,即可知道參數
import pandas as pd 
pd.to_datetime

#參數如下
pd.to_datetime(arg, errors='raise', dayfirst=False, yearfirst=False, utc=None, box=True, format=None, exact=True, unit=None, infer_datetime_format=False, origin='unix', cache=True)

參數:

(1)arg:int,float,str,datetime,list,tuple,1-d數組,Series,DataFrame / dict-like,要轉換為日期時間的對象

(2)errors:{'ignore','raise','coerce'},默認為'raise'

  • 如果為“ raise”,則無效的解析將引發異常
  • 如果為“coerce”,則將無效解析設置為NaT
  • 如果為“ ignore”,則無效的解析將返回輸入

(3)dayfirst:bool,默認為False,

  • 如果arg是str或類似列表,則指定日期解析順序。
  • 如果為True,則首先解析日期,例如12/10/11解析為2011-10-12。
  • 警告:dayfirst = True並不嚴格,但更喜歡使用day first進行解析(這是一個已知的錯誤,基於dateutil的行為)

(4)yearfirst:布爾值,默認為False,

  • 如果arg是str或類似列表,則指定日期解析順序。
  • 如果True解析日期以年份為第一,則將10/11/12解析為2010-11-12。
  • 如果dayfirst和yearfirst均為True,則在yearfirst之后(與dateutil相同)。
  • 警告:yearfirst = True並不嚴格,但更喜歡使用year first進行解析(這是一個已知的錯誤,基於dateutil的行為)。
#如果是dayfirst,則日月年,如果yearfirst = True,則年月日,默認的是月日年
pd.to_datetime('10/11/12',dayfirst = True)  #Timestamp('2012-11-10 00:00:00')
pd.to_datetime('12/10/11',dayfirst = True) # Timestamp('2011-10-12 00:00:00')
pd.to_datetime('10/11/12',yearfirst = True)  # Timestamp('2010-11-12 00:00:00')
pd.to_datetime('10/11/12')  #Timestamp('2012-10-11 00:00:00')

(5)utc: bool,默認值 None,如果為True,則返回UTC DatetimeIndex(也轉換任何支持tz的datetime.datetime對象)

(6)format:str,格式,default None,解析時間的strftime,例如“%d /%m /%Y”,請注意,“%f”將一直解析直至納秒。有關選擇的更多信息,請參見strftime文檔:https : //docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior

(7)exact:精度,bool:True by default,表現為:如果為True,則需要精確的格式匹配。如果為False,則允許格式匹配目標字符串中的任何位置。

(8)unit: str,單位,default ‘ns’,arg的單位(D,s,ms,us,ns)表示單位,它是整數或浮點數。這將基於原點。例如,在unit ='ms'和origin ='unix'(默認值)的情況下,這將計算到unix紀元開始的毫秒數

(9)infer_datetime_format:bool,默認為False,如果為True且未給出格式,請嘗試根據第一個非NaN元素推斷日期時間字符串的格式,如果可以推斷出日期時間字符串的格式,請切換到解析它們的更快方法。在某些情況下,這可以使解析速度提高約5-10倍。

(10)origin:標量, default ‘unix’,

      定義參考日期。自該參考日期以來,數值將被解析為單位數(由unit定義)。

  • 如果是“ unix”(或POSIX)時間;原點設置為1970-01-01。
  • 如果為'julian',則單位必須為'D',並且原點設置為Julian Calendar的開頭。朱利安天數0被指定為從4713年1月1日中午開始的那一天。
  • 如果時間戳可轉換,則將原點設置為由原點標識的時間戳。

(11)cache:布爾值,默認為True

如果為True,則使用唯一的轉換日期緩存來應用datetime轉換。解析重復的日期字符串時,尤其是帶有時區偏移的日期字符串時,可能會大大提高速度。僅當至少有50個值時才使用緩存。越界值的存在將使高速緩存不可用,並可能減慢解析速度
0.23.0版中的新功能。在0.25.0版中進行了更改: -將默認值從False更改為True。

返回值:

datetime

如果解析成功。返回類型取決於輸入:

  • list-like: DatetimeIndex

  • Series: Series of datetime64 dtype

  • scalar: Timestamp

如果無法返回指定的類型(例如,當輸入的任何元素在Timestamp.min之前或Timestamp.max之后),則返回將具有datetime.datetime類型(或對應的數組/系列)。

例子:

從DataFrame的多個列中組合一個日期時間。鍵可以是常見的縮寫,例如['year','month','day','minute','second','ms','us','ns'])或相同的復數形式

import pandas as pd 
pd.to_datetime

df = pd.DataFrame({'year': [2015, 2016],
                   'month': [2, 3],
                   'day': [4, 5]})

df
'''
   year  month  day
0  2015      2    4
1  2016      3    5
'''

pd.to_datetime(df)

'''
0   2015-02-04
1   2016-03-05
dtype: datetime64[ns]
'''

如果日期不符合時間戳限制,則傳遞errors ='ignore'將返回原始輸入,而不引發任何異常。
如果將error ='coerce'傳遞給NaT,則除了將非日期(或不可解析的日期)強制為NaT外,還將對NaT強制執行越界日期。

pd.to_datetime('13000101', format='%Y%m%d', errors='ignore')
#datetime.datetime(1300, 1, 1, 0, 0)
pd.to_datetime('13000101', format='%Y%m%d', errors='coerce')
#NaT

傳遞infer_datetime_format = True通常可以加快解析速度,如果解析不是完全采用ISO8601格式,而是采用常規格式。

s = pd.Series(['3/11/2000', '3/12/2000', '3/13/2000'] * 1000)
s.head(1)
#0    3/11/2000
#dtype: object
%timeit pd.to_datetime(s, infer_datetime_format=True)  
#1.53 ms ± 139 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)

%timeit pd.to_datetime(s, infer_datetime_format=False)  
#1.51 ms ± 21.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

使用Unix紀元時間

pd.to_datetime(1490195805, unit='s')
#Timestamp('2017-03-22 15:16:45')

pd.to_datetime(1490195805433502912, unit='ns')
#Timestamp('2017-03-22 15:16:45.433502912')

使用非unix紀元原點

pd.to_datetime([1, 2, 3], unit='D',
               origin=pd.Timestamp('1960-01-01'))

# DatetimeIndex(['1960-01-02', '1960-01-03', '1960-01-04'], dtype='datetime64[ns]', freq=None)

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM