57 pandas 时间序列-to_datetime将对象转换为时间戳(tcy)

时间:2019-01-19
本文章向大家介绍57 pandas 时间序列-to_datetime将对象转换为时间戳(tcy),主要包括57 pandas 时间序列-to_datetime将对象转换为时间戳(tcy)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

pd.to_datetime()2019/1/19

1.1函数

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=False)#转datetime
应用:要转换Series类似日期的对象或类似列表的对象,例如字符串,纪元或混合
返回:DatetimeIndex,datetime64系列,标量时间戳,本身

1.2参数: 

arg:int,float,str,datetime,list,tuple,1-d array,Series或像DataFrame/dict
# 要求:year,month,day可选:hour,minute,second,millisecond,microsecond,nanosecond
errors ='raise': {'ignore','raise','coerce'}#引发异常设置为NaT//返回输入
dayfirst=False
# 参数为False,arg=str或[str]请指定日期解析顺序
# 参数为True先解析日期,例如10/11/12被解析为2012年11月10日
yearfirst=False
# 参数为False,arg=str或[str]请指定日期解析顺序
# 参数为True先解析年份的日期,例如10/11/12被解析为2010年-11月-12日
utc=None:bool返回UTC DatetimeIndex;如为True感知tz
box=True#True返回DatetimeIndex/False返回ndarray
format=None:str#要解析时间格式,如“%d /%m /%Y”,“%f”将解析到纳秒
exact=True#为True精确匹配/为False允许格式匹配目标字符串中的任何位置
unit='ns':str#arg整数或浮点数单位(D,s,ms,us,ns)
# 例如unit ='ms',origin ='unix'计算unix纪元开始的毫秒数。
infer_datetime_format=False#为True且无format尝试推断格式;速度慢
origin='unix'或时间点#定义参考日期。数值被解析为数字自参考日期以来的单位
# - 'unix'(或POSIX)时间;原点设定为1970-01-01
# - 'julian'日历则单位必须为'D',并且原点设置为'j'#朱利安日数0被分配到开始的那一天公元前4713年1月1日中午。
cache=False#为True使用缓存;解析重复日期时可能会产生明显的加速,尤其是具有时区偏移的字符串。

实例1: 

# 实例1:从多个DataFrame列组装日期时间
df = pd.DataFrame({'year': [2018, 2019],'month': [2, 3], 'day': [4, 5],'hour': [2, 3]})
pd.to_datetime(df)
'''
0 2018-02-04 02:00:00
1 2019-03-05 03:00:00
dtype: datetime64[ns]
'''

实例2:

# 实例2:只传递需要组装的列
pd.to_datetime(df[['year', 'month', 'day']])
'''''''''
0 2018-02-04
1 2019-03-05
dtype: datetime64[ns]
'''

实例3: 

# 实例3:errors
pd.to_datetime(['2019/07/31', 'asd'], errors='raise') #错误

pd.to_datetime(['2019/07/31', 'asd'], errors='ignore') #返回原始输入
#array(['2019/07/31', 'asd'], dtype=object)
pd.to_datetime('13000101', format='%Y%m%d', errors='ignore')
# datetime.datetime(1300, 1, 1, 0, 0)

pd.to_datetime(['2019/07/31', 'asd'], errors='coerce') #返回NaT
#DatetimeIndex(['2019-07-31', 'NaT'], dtype='datetime64[ns]', freq=None)
pd.to_datetime('13000101', format='%Y%m%d', errors='coerce')# NaT

实例4:

# 实例4.1:unit-纪元时间戳
pd.to_datetime([1549720105, 1549730105], unit='s')
#DatetimeIndex(['2019-02-09 13:48:25', '2019-02-09 16:35:05'], dtype='datetime64[ns]', freq=None)

pd.to_datetime([1549720105000, 1549730105000], unit='ms')#会出现float舍入问题
#DatetimeIndex(['2019-02-09 13:48:25', '2019-02-09 16:35:05'], dtype='datetime64[ns]', freq=None)
# 实例4.2:实现精确精度的唯一方法是使用固定宽度类型(例如int64)
pd.to_datetime([1490195805.433, 1490195805.433502912], unit='s')#对于float arg,可能会发生精确舍入
#DatetimeIndex(['2017-03-22 15:16:45.433000088', '2017-03-22 15:16:45.433502913'], dtype='datetime64[ns]', freq=None)

pd.to_datetime(1490195805433502912, unit='ns')
#Timestamp('2017-03-22 15:16:45.433502912')
    
# 实例4.3:从时间戳到大纪元- Timestamp转换为'unix'时代:
# 减去时期(UTC时间1970年1月1日午夜),然后除以“单位”(1秒)
rng = pd.date_range('2019-1-17 15:51:05', periods=3, freq='D')
(rng - pd.Timestamp("1970-01-01")) // pd.Timedelta('1s')
# Int64Index([1547740265, 1547826665, 1547913065], dtype='int64')

实例5-使用非unix时代起源:

使用非unix时代起源
# 实例5.1:使用origin参数-替代起点1970-1-1
pd.to_datetime([1, 2, 3], unit='D', origin=pd.Timestamp('1960-01-01'))#使用1960-01-01作为开始日期
#DatetimeIndex(['1960-01-02', '1960-01-03', '1960-01-04'], dtype='datetime64[ns]', freq=None)

# 实例5.2:默认origin='unix';俗称'unix epoch'或POSIX时间1970-01-01 00:00:00
pd.to_datetime([1, 2, 3], unit='D')
#DatetimeIndex(['1970-01-02', '1970-01-03', '1970-01-04'], dtype='datetime64[ns]', freq=None)

实例6:infer_datetime_format = True通常可以加快解析速度:

s = pd.Series(['3/11/2000', '3/12/2000', '3/13/2000']*1000)
%timeit pd.to_datetime(s,infer_datetime_format=True)#不是ISO8601格式,而是常规格式
# 100 loops, best of 3: 10.4 ms per loop
%timeit pd.to_datetime(s,infer_datetime_format=False)
# 1 loop, best of 3: 471 ms per loop