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

目录
  • 数据预处理
    • 方式一
    • 方式二
    • 方式三
  • 参考:

时间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

到此这篇关于pd.to_datetime中时间object转换datetime实例的文章就介绍到这了,更多相关pd.to_datetime 时间转换datetime内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python中时间转换datetime和pd.to_datetime详析

    前言 我们在python对数据进行操作时,经常会选取某一时间段的数据进行分析.这里为大家介绍两个我经常用到的用来选取某一时间段数据的函数:datetime( )和pd.to_datetime( ). (一)datetime( ) (1)获取指定的时间和日期.datetime(%Y,%m,%d,%H,%M,%S) datetime共有6个参数,分别代表的是年月日时分秒.其中年月日是必须要传入的参数,时分秒可以不传入,默认全为零. eg: (2)将Str和Unicode转化为datetimedate

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

    目录 数据预处理 方式一 方式二 方式三 参考: 时间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:

  • python获取时间及时间格式转换问题实例代码详解

    整理总结一下python中最常用的一些时间戳和时间格式的转换 第一部分:获取当前时间和10位13位时间戳 import datetime, time '''获取当前时间''' n = datetime.datetime.now() print(n) '''获取10位时间戳''' now = time.time() print(int(now)) '''获取13位时间戳''' now2 = round(now*1000) print(now2) 运行结果为: 2018-12-06 11:00:30

  • DataFrame中的object转换成float的方法

    数据类型转换: 今天遇到一个问题,就是DataFrame类型的数据里是str型的数字,想把数字转换为int 或float:百度没有发现好的,也可能输入的关键字不对,找不到: DataFrame.info()之后发现数据全是object 之前有一个方法就是: 先traindata=np.array(traindata,dtype=np.float)之后在 traindata=pd.DataFrame(traindata)转换 但看着很繁琐,突发奇想,试到了下面的方法,一句就搞定得意得意 train

  • JavaScript中的object转换函数toString()与valueOf()介绍

    JavaScript中,object转换为boolean的操作非常简单:所有的object转换成boolean后均为true:即使是new Boolean(false)这样的object在转换为boolean后仍然为true. 复制代码 代码如下: var x = new Boolean(false); if(x){   console.log("x is true"); } 在将object转换为string或者number时,JavaScript会调用object的两个转换函数:t

  • JavaScript中的object转换成number或string规则介绍

    在JavaScript程序编写过程中,根据不同的上下文,JS会自动将object转换成number或者string后再处理.这种自动转换的规则如下: object自动转换成string的规则: 1.如果object所属类覆写了toString()方法,则调用该方法.如果toString()调用的返回结果为Primitive(string.number.boolean.undefined.null),则将该Primitive值转换成string后返回. 2.如果object所属类没有覆写toStr

  • PHP正则匹配日期和时间(时间戳转换)的实例代码

    先来一个比较简单实用的代码 日期YYYY-MM-DD $str = ''; $isMatched = preg_match('/^\d{4}(\-|\/|.)\d{1,2}\1\d{1,2}$/', $str, $matches); var_dump($isMatched, $matches); php需要一定的时间格式才能转换成时间戳(表示从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数),这就要用到php正则判断,以下是代码: <?php //匹配时间格式为2016-0

  • 彻底解决Spring mvc中时间的转换和序列化等问题

    痛点 在使用Spring mvc 进行开发时我们经常遇到前端传来的某种格式的时间字符串无法用java8的新特性java.time包下的具体类型参数来直接接收. 我们使用含有java.time封装类型的参数接收也会报反序列化问题,在返回前端带时间类型的同样会出现一些格式化的问题.今天我们来彻底解决他们. 建议 其实最科学的建议统一使用时间戳来代表时间.这个是最完美的,避免了前端浏览器的兼容性问题,同时也避免了其它一些中间件的序列化/反序列化问题.但是用时间表达可能更清晰语义化.两种方式各有千秋,如

  • pandas时间序列之pd.to_datetime()的实现

    目录 解析来自各种来源和格式的时间序列信息 时间序列解析之小试牛刀 时间序列解析之磨刀霍霍 1. 指定识别的format 2. 遇到DataFrame 3. 遇到不能识别的处理方法 4. origin的用法 解析来自各种来源和格式的时间序列信息 pd.to_datetime( arg,#int, float, str, datetime, list, tuple, 1-d array, Series DataFrame/dict-like errors='raise',# {'ignore',

  • C++ 中时间与时间戳的转换实例详解

    C++ 中时间与时间戳的转换实例详解 // 设置时间显示格式: NSString *timeStr = @"2011-01-26 17:40:50"; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateStyle:NSDateFormatterMediumStyle]; [formatter setTimeStyle:NSDateFormatterShortStyle]; [fo

随机推荐