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
投稿

猜你喜欢

  • python 多线程爬取壁纸网站的示例

    2023-11-14 21:45:30
  • 浅析Windows 嵌入python解释器的过程

    2023-01-26 11:43:28
  • 用php来改写404错误页让你的页面更友好

    2023-10-26 20:16:21
  • 举例讲解Python中的死锁、可重入锁和互斥锁

    2023-12-21 07:35:03
  • python快速排序的实现及运行时间比较

    2022-11-30 20:41:27
  • python利用tkinter实现屏保

    2022-01-26 05:39:51
  • python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例

    2022-06-05 14:11:58
  • JDBC利用C3P0数据库连接池连接数据库

    2024-01-13 12:37:51
  • Python文件基本操作实用指南

    2022-05-05 23:22:28
  • vue后台返回base64图片无法显示的解决

    2024-05-09 15:21:11
  • 完整java开发中JDBC连接数据库代码和步骤

    2024-01-21 19:27:23
  • Python中函数的参数定义和可变参数用法实例分析

    2023-10-04 00:26:30
  • HTML中使背景图片自适应浏览器大小实例详解

    2024-05-02 16:18:32
  • ubuntu lamp(apache+mysql+php) 环境搭建及相关扩展更新

    2023-10-16 03:26:55
  • Python 实现绘制子图及子图刻度的变换等问题

    2021-09-30 22:34:38
  • 图片自适应宽度新解决方法

    2009-09-22 14:55:00
  • Asp用正则表达式获取文章中的所有图片地址

    2010-07-17 13:11:00
  • 教你如何在pycharm中使用less

    2021-08-12 13:59:32
  • Python之tkinter组合框Combobox用法及说明

    2022-09-27 20:29:59
  • MySQL中触发器的基础学习教程

    2024-01-15 21:21:11
  • asp之家 网络编程 m.aspxhome.com