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
%S00~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。

四、书籍推荐

书籍展示:《Web安全攻防从入门到精通》


【书籍内容简介】

  • 全书共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模块

100天精通Python(数据分析篇)——第54天:Series对象大总结

100天精通Python(数据分析篇)——第50天:numpy进阶