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)