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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)