100天精通Python(数据分析篇)——第61天:Pandas.to_datetime函数(处理时间)
Posted 无 羡ღ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了100天精通Python(数据分析篇)——第61天:Pandas.to_datetime函数(处理时间)相关的知识,希望对你有一定的参考价值。
文章目录
每篇前言
🏆🏆作者介绍:Python领域优质创作者、华为云享专家、阿里云专家博主、2021年CSDN博客新星Top6
- 🔥🔥本文已收录于Python全栈系列专栏:《100天精通Python从入门到就业》
- 📝📝此专栏文章是专门针对Python零基础小白所准备的一套完整教学,从0到100的不断进阶深入的学习,各知识点环环相扣
- 🎉🎉订阅专栏后续可以阅读Python从入门到就业100篇文章;还可私聊进千人Python全栈交流群(手把手教学,问题解答); 进群可领取80GPython全栈教程视频 + 300本计算机书籍:基础、Web、爬虫、数据分析、可视化、机器学习、深度学习、人工智能、算法、面试题等。
- 🚀🚀加入我一起学习进步,一个人可以走的很快,一群人才能走的更远!
一、to_datetime参数说明(代码实战)
语法格式:
Pandas.to_datetime(
arg: DatetimeScalarOrArrayConvertible,
errors: str = "raise",
dayfirst: bool = False,
yearfirst: bool = False,
utc: bool | None = None,
format: str | None = None,
exact: bool = True,
unit: str | None = None,
infer_datetime_format: bool = False,
origin="unix",
cache: bool = True,
) -> DatetimeIndex | Series | DatetimeScalar | NaTType | None:
1. arg
要转换为日期时间的对象。如果提供了DataFrame,则该方法至少需要以下列:“年”、“月”、“日”。接收参数:int、float、str、datetime、list、tuple、1-d数组、Series、DataFrame/dict类
(1)接收时间戳(float):
import pandas as pd
import numpy as np
import time
t = time.time()
print(t,type(t))
df = pd.to_datetime(t)
print(df)
运行结果:
(2)接收字符串:
import pandas as pd
import numpy as np
import time
df = pd.to_datetime('2022-10-10')
print(df)
t = time.asctime()
print(t, type(t))
df = pd.to_datetime(t)
print(df)
运行结果:
(3)datetime类型:
import pandas as pd
import numpy as np
import time
import datetime
t = datetime.datetime.now()
print(t, type(t))
df = pd.to_datetime(t)
print(df)
运行结果:
(4)接收DataFrame类型:
import pandas as pd
import numpy as np
import time
import datetime
df = pd.DataFrame('year': [2022, 2021, ],
'month': [11, 10],
'day': [11, 10])
print(df)
df_time = pd.to_datetime(df)
print(df_time)
运行结果:
2. errors
指定errors忽略 Out of bounds nanosecond timestamp , 或将报错datetime转为NaT。接收参数:{‘ignore’,‘raise’,‘force’},默认’raise’。
- 如果“raise”,则无效解析将引发异常。
- 如果为“coerce”,则无效解析将被设置为NaT。
- 如果“ignore”,则无效解析将返回输入。
(1)设置为raise
:
import pandas as pd
import numpy as np
import time
import datetime
df = pd.DataFrame('year': [2022, 2021],
'month': [11, 10],
'day': [40, 40])
print(df)
df_time = pd.to_datetime(df,errors='raise')
print(df_time)
运行结果:一个没有第40号所以报错
(2)设置为coerce
:
import pandas as pd
import numpy as np
import time
import datetime
df = pd.DataFrame('year': [2022, 2021],
'month': [11, 10],
'day': [40, 40])
print(df)
df_time = pd.to_datetime(df,errors='coerce')
print(df_time)
运行结果:
(3)设置为ignore
:
import pandas as pd
import numpy as np
import time
import datetime
df = pd.DataFrame('year': [2022, 2021],
'month': [11, 10],
'day': [40, 40])
print(df)
df_time = pd.to_datetime(df,errors='ignore')
print(df_time)
运行结果:
3. dayfirst
如果arg是str或类似列表,请指定日期解析顺序。如果为True,则以第一天为单位解析日期,例如“10/11/12”解析为2012-11-10。接收bool类型,默认为false。dayfirst=True不严格,但更喜欢使用dayfirst进行解析。如果无法根据给定的dayfirst选项解析带分隔符的日期字符串,例如to_datetime([31-12-2021]),则会显示警告。
传31天进去:
import pandas as pd
import numpy as np
import time
import datetime
df_time = pd.to_datetime('31/11/12', dayfirst=False)
print(df_time)
运行结果:
4. yearfirst
- 如果arg是str或类似列表,请指定日期解析顺序。
- 如果True以年份开头解析日期,例如“10/11/12”解析为2010-11-12。
- 如果dayfirst和yearfirst都为True,则yearfirsts前面是(与dateutil相同)。
- 警告:yearfirst=True不严格,但更喜欢使用yearfirst进行解析。
import pandas as pd
import numpy as np
import time
import datetime
df = pd.DataFrame('day': ['22/10/24', '21/11/11'])
print(df)
df_time = pd.to_datetime(df['day'], yearfirst=True)
print(df_time)
运行结果:
5. utc
控制时区相关的解析、本地化和转换。接收bool布尔类型,默认为None
- 如果为True,则该函数始终返回一个识别时区的UTC本地化时间戳、序列或日期时间索引。为此,时区原始输入本地化为UTC,而时区感知输入转换为UTC。
- 如果为False(默认),输入将不会强制为UTC。时区原始输入将保持原始,而时区感知输入将保持其时间偏移。混合偏移(通常为夏令时)存在限制,有关详细信息,请参见示例部分。
6. format
解析时间的strftime,例如“%d/%m/%Y”。请注意,“%f”将一直解析到纳秒。接收字符串类型。
格式化字符串 | 日期/时间说明 | 值范围和实例 |
---|---|---|
%Y | 年份 | 0000~9999,例如:2022 |
%m | 月份 | 01~12,例如:3 |
%B | 月份名称 | January~December,例如:April |
%b | 月份名称缩写 | Jan~Dec,例如:Apr |
%d | 日期 | 01~31,例如:20 |
%A | 星期 | Monday~Sunday,例如:Wednesday |
%a | 星期缩写 | Mon~Sun,例如:Wed |
%H | 小时(24h制) | 00~23,例如:12 |
%I | 小时(12h制) | 01~12,例如:7 |
%p | 上\\下午 | AM\\PM,例如:PM |
%M | 分钟 | 00~59,例如:10 |
%S | 秒 | 00~59,例如:20 |
%w | 星期几(具体) | 1~7,例如:7 |
%W | 整年的第几周 | 1-52,例如:2 |
import pandas as pd
import numpy as np
import time
import datetime
df = pd.DataFrame('year': [2022, 2021, ],
'month': [11, 10],
'day': [11, 10])
print(df)
df_time = pd.to_datetime(df, format='%Y-%m-%d')
print(df_time)
运行结果:
7. exact
控制格式的使用方式,接收bool布尔类型,默认为True:
- 如果为True,则需要精确的格式匹配。
- 如果为False,则允许格式与目标字符串中的任何位置匹配。
8. unit
接收字符串,默认为“ns”。arg的单位(D,s,ms,us,ns)表示单位,即整数或浮点数。这将基于原点。例如,使用unit='ms’和origin=‘unix’,这将计算到unix历元开始的毫秒数。注意:要求arg参数传递时间戳,不然会报错。
(1)传递其他时间格式:
import pandas as pd
import numpy as np
import time
import datetime
df = pd.DataFrame('day': ['22/10/24', '21/11/11'])
print(df)
df_time = pd.to_datetime(df , yearfirst=True)
print(df_time)
运行结果:
(2)传递时间戳:
import pandas as pd
import numpy as np
import time
import datetime
df_time = pd.to_datetime(time.time(), unit='ms')
print(df_time)
运行结果:
9. infer_datetime_format
如果为True且未给出格式,请尝试根据第一个非NaN元素推断日期时间字符串的格式,如果可以推断,请切换到更快的方法来解析它们。在某些情况下,这可以将解析速度提高5-10倍。当数据量大的时候用这个参数可以提高解析速度!
10. origin
定义参考日期。数值将被解析为自该参考日期以来的单位数(按单位定义)。标量,默认为“unix”
- 如果为:“unix”(或POSIX)时间;原点设置为1970-01-01。
- 如果为:“julian”,单位必须为“D”,原点设置为朱利安日历的开始。儒略日0被指定为公元前4713年1月1日中午开始的一天。
- 如果“时间戳”可转换,则“原点”设置为“由原点标识的时间戳”。
(1)指定时间:
import pandas as pd
import numpy as np
import time
import datetime
df_time = pd.to_datetime([1, 2, 3], unit='D', origin='2022-01-01')
print(df_time)
运行结果:
(2)不指定时间:不指定时间则默认从19700101开始
import pandas as pd
import numpy as np
import time
import datetime
df_time = pd.to_datetime([1, 2, 3], unit='D')
print(df_time)
运行结果:
11. cache
如果为True,请使用唯一的已转换日期缓存来应用日期时间转换。在解析重复的日期字符串时,尤其是带有时区偏移量的字符串时,可能会产生显著的加速。缓存仅在至少有50个值时使用。存在越界值将导致缓存无法使用,并可能会降低解析速度。接收bool类型参数,默认为True。在版本0.25.0中更改:将默认值从False更改为True。
二、返回值
1. datetime
如果解析成功。返回类型取决于输入(括号中的类型对应于时区或时间戳解析不成功时的回退):
- 标量:时间戳(或datetime.datetime)
- 数组:DatetimeIndex(或对象dtype包含datetime.datetime的序列)
- Series:datetime64数据类型系列(或包含datetime.datetime的对象数据类型系列)
- DataFrame:datetime64数据类型系列(或包含datetime.datetime的对象数据类型系列)
(1)arg传递标量:
import pandas as pd
import time
import datetime
df_time = pd.to_datetime(time.time())
print(df_time)
print(type(df_time))
运行结果:
(2)arg传递数组返回DatetimeIndex
import pandas as pd
import numpy as np
import time
import datetime
df_time = pd.to_datetime(['2017-08-01', '2018-08-02', '2018-08-03', '2018-08-04','2018-08-05'])
print(df_time)
print(type(df_time))
运行结果:
(3)arg传递Series返回datetime64数据类型系列:
import pandas as pd
import time
import datetime
ser_obj = pd.Series(['2017-08-01', '2018-08-02', '2018-08-03', '2018-08-04','2018-08-05'])
df_time = pd.to_datetime(ser_obj)
print(df_time)
print(type(df_time))
运行结果:
(4)argDataFrame:
import pandas as pd
import numpy as np
import time
import datetime
df = pd.DataFrame('year': [2022, 2021, ],
'month': [11, 10],
'day': [11, 10])
print(df)
df_time = pd.to_datetime(df)
print(df_time)
运行结果:
三、报错
1. ParserError
报错信息:When parsing a date from string fails.
报错翻译:从字符串解析日期失败时。
2. ValueError
发生另一个日期时间转换错误时。例如,当DataFrame中缺少“year”、“month”、“day”列中的一列时,或者当Timezone感知日期时间时。datetime是在类似于混合时间偏移的数组中找到的,并且utc=False。
四、书籍推荐
【书籍内容简介】
- 全书共21章,第1章到第6章讲解入门知识,包括HTTP基本概念、工具实战、信息收集、靶场搭建等内容;第7章到第20章讲解Web渗透测试的14个典型漏洞案例,包括SQL注入、XSS漏洞、CSRF漏洞、SSRF漏洞、任意文件上传、业务逻辑漏洞等内容;第21章是项目实战,主要模拟真实Web安全评估项目。
以上是关于100天精通Python(数据分析篇)——第61天:Pandas.to_datetime函数(处理时间)的主要内容,如果未能解决你的问题,请参考以下文章
100天精通Python(数据分析篇)——第51天:numpy函数进阶
100天精通Python(数据分析篇)——第52天:numpy完结
100天精通Python(数据分析篇)——第53天:初始pandas模块
100天精通Python(数据分析篇)——第49天:初识numpy模块