pd.to_datetime中时间object转换datetime实例

作者:ZSYL 时间:2021-09-23 19:22:15 

时间object转换datetime实例

首先说一下:

  • 1/17/07 has the format “%m/%d/%y”

  • 17-1-2007 has the format “%d-%m-%Y”

这是一部分的时间转换格式,通过以上的格式,你可以将DataFrame中的时间格式转换为以下等python格式:

0   2007-03-02
1   2007-03-22
2   2007-04-06
3   2007-04-14
4   2007-04-15
Name: date_parsed, dtype: datetime64[ns]

dtype:datetime64,这是转换过后的形式,其实你可以将原数据使用dtype查看列,来看它的格式。你会发现它是object形式的。这个object格式一般是python用来记录可变化的兑现的格式。这个格式并不能认出是时间格式,尽管我们一眼就能看出,但机器不行。

data = pd.read_csv('path')    # 获取data数据
data['date'].head()  # 查看一下日期列
0    01/02/1965
1    01/04/1965
2    01/05/1965
3    01/08/1965
4    01/09/1965
Name: Date, dtype: object

可以看出它为object格式,并非日期格式。

data['date_parsed'] = pd.to_datetime(data['date'], format="%m/%d/%y")

上面我们按python格式转换时间,并添加到新的一列中去。

dara['date_parsed'].head()    #查看一下结果
1
0    1965-01-02
1    1965-01-04
2    1965-01-05
3    1965-01-08
4    1965-01-09

Name: data_parsed, dtype: datetime64[ns]

处理过程中可能会出现问题:

/opt/conda/lib/python3.6/site-packages/pandas/core/tools/datetimes.py in _convert_listlike(arg, box, format, name, tz)
    271                     try:
    272                         result = array_strptime(arg, format, exact=exact,
--> 273                                                 errors=errors)
    274                     except tslib.OutOfBoundsDatetime:
    275                         if errors == 'raise':
 
pandas/_libs/tslibs/strptime.pyx in pandas._libs.tslibs.strptime.array_strptime()
 
ValueError: time data '1975-02-23T02:58:41.000Z' does not match format '%m/%d/%Y' (match)

反复的验证后发现应该是原数据有问题,部分时间数据格式有误:

比如: 1965-01-02,这是正常时间格式,但是有的时间数据是:1965-01-028、1969-011-26 等情况,时间数据长度超过正常的len=10.

因此我们需要数据预处理,清洗数据。

数据预处理

方式一

添加一列记录为每行时间的长度,apply(len):传入len()函数,处理Date列数据。

data['over_long'] = data['Date'].apply(len)  # 添加一列记录为每行时间的长度,apply(len):传入len()函数
data.loc[data['over_long'] > 10]    # 输出大于正常数据的行   这里会发现缺失有那么几行在作怪!!!

正常处理:

normal_dates = data.loc[data['over_long'] < 11]    # 筛选出正常数据
normal_dates = normal_dates.copy()        # 拷贝
normal_dates['data_parsed'] = pd.to_datetime(normal_dates['Date'],format='%m/%d/%Y')    # 再次转换时间,没有报错
normal_dates['data_parsed'].head(10)    # 输出查看没问题的数据

方式二

data['date_parsed'] = pd.to_datetime(data['Date'], format = "%m/%d/%Y", errors = 'coerce')

errors = 'coerce'

Pandas数据转换时遇到不能转换的数据转为NaN的参数设置 errors='coerce'

Pandas 提供了一个可选的参数 errors,传入 errors='coerce',Pandas 遇到不能转换的数据就会赋值为 NaN(Not a Number)

在这里,Pandas 遇到不能转化的时间数据后会赋值 Nan 并跳过。

方式三

data['date_parsed'] = pd.to_datetime(data['Date'], infer_datetime_format=True)

infer_datetime_format: boolean类型, default False

如果设定为True并且 parse_dates 可用,那么pandas将尝试转换为日期类型,如果可以转换,转换方法并解析。在某些情况下会快5~10倍。

在这里,Pandas 遇到不能转化的时间数据后会跳过。

参考:

Link

Link

来源:https://blog.csdn.net/qq_46092061/article/details/118673147

标签:pd.to,datetime,时间,转换,datetime
0
投稿

猜你喜欢

  • 浅谈python3打包与拆包在函数的应用详解

    2022-03-05 00:33:15
  • 详解Python中的分组函数groupby和itertools)

    2022-08-30 15:03:18
  • python不等于运算符的具体使用

    2022-03-29 11:21:21
  • python中查看.db文件中表格的名字及表格中的字段操作

    2022-03-17 22:00:29
  • 将后台数据从Berkeley的文件DB转到MySQL

    2009-01-04 13:31:00
  • 个人微信公众号接入ChatGPT的教程分享

    2023-04-08 00:34:02
  • Python实现异步IO的示例

    2021-01-11 13:25:38
  • Django 权限认证(根据不同的用户,设置不同的显示和访问权限)

    2023-09-18 04:07:30
  • Python中使用json.load()和json.loads()加载json数据的方法实例

    2021-12-15 20:12:31
  • python给视频添加背景音乐并改变音量的具体方法

    2021-01-26 20:18:47
  • Python3中常见配置文件写法汇总

    2022-01-21 11:14:07
  • 详解python中的线程

    2021-11-19 18:30:35
  • 框架布局慎用元素

    2008-12-21 16:33:00
  • 对Python 字典元素进行删除的方法

    2021-07-03 00:27:50
  • JS中from 表单序列化提交的代码

    2023-09-09 22:54:01
  • 前端开发中一些常用技巧总结

    2010-07-18 13:13:00
  • ASP利用 xmlhttp 分块上传文件

    2007-11-01 22:55:00
  • suggest项目总结-用户体验篇

    2008-01-30 20:04:00
  • 数据库主键的故事

    2008-05-31 07:50:00
  • python 换位密码算法的实例详解

    2021-10-07 10:25:57
  • asp之家 网络编程 m.aspxhome.com