假设目前已经引入了 pandas,同时也拥有 pandas 的 DataFrame 类型数据。

import pandas as pd

数据集如下

df.head(3)
        date    open    close    high    low        volume        code
0 2006-12-18 3.905 3.886 3.943 3.867 171180.67 600001
1 2006-12-19 3.886 3.924 3.981 3.867 276799.39 600001
2 2006-12-20 3.934 3.934 3.962 3.809 265653.85 600001

查看每一列的类型

df.info()

从结果的第四排可以看见 date 这一列类型是"object",即字符类型。

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 640 entries, 0 to 639
Data columns (total 7 columns):
date 640 non-null object
open 640 non-null float64
close 640 non-null float64
high 640 non-null float64
low 640 non-null float64
volume 640 non-null float64
code 640 non-null object
dtypes: float64(5), object(2)
memory usage: 35.1+ KB

现在的目标是:

  • 把 date 这一列用作索引
  • 把 date 用作索引时,类型需要是 DatetimeIndex。

方法1: .to_datetime 和 .set_index

首先,利用 pandas 的to_datetime 方法,把 "date" 列的字符类型数据解析成 datetime 对象。

然后,把 "date" 列用作索引。

df['date'] = pd.to_datetime(df['date'])
df.set_index("date", inplace=True)

结果:

df.head(3)
            open    close    high    low        volume        code
date
2006-12-18 3.905 3.886 3.943 3.867 171180.67 600001
2006-12-19 3.886 3.924 3.981 3.867 276799.39 600001
2006-12-20 3.934 3.934 3.962 3.809 265653.85 600001

查看索引是否成为 DatetimeIndex 类型,可以看见确实已经成功转化类型。

df.axes
[DatetimeIndex(['2006-12-18', '2006-12-19', '2006-12-20', '2006-12-21',
'2006-12-22', '2006-12-25', '2006-12-26', '2006-12-27',
'2006-12-28', '2006-12-29',
...
'2009-12-02', '2009-12-03', '2009-12-04', '2009-12-07',
'2009-12-08', '2009-12-09', '2009-12-10', '2009-12-11',
'2009-12-14', '2009-12-15'],
dtype='datetime64[ns]', name='date', length=640, freq=None),
Index(['open', 'close', 'high', 'low', 'volume', 'code'], dtype='object')]

方法2: .DatetimeIndex

首先是原始数据。

df2.head(3)
        date    open    close    high    low        volume        code
0 2003-08-01 4.997 4.949 5.016 4.949 20709.15 600002
1 2003-08-04 4.949 5.045 5.054 4.949 23923.35 600002
2 2003-08-05 5.054 5.093 5.131 5.006 35224.00 600002

先把 "date" 列用作索引,然后使用 DatetimeIndex 将字符类型转化成 DateIndex

df2.set_index("date", inplace=True)

这个时候索引还是 object 类型,就是字符串类型。

df2.axes
[Index(['2003-08-01', '2003-08-04', '2003-08-05', '2003-08-06', '2003-08-07',
'2003-08-08', '2003-08-11', '2003-08-12', '2003-08-13', '2003-08-14',
...
'2006-03-24', '2006-03-27', '2006-03-28', '2006-03-29', '2006-03-30',
'2006-03-31', '2006-04-03', '2006-04-04', '2006-04-05', '2006-04-06'],
dtype='object', name='date', length=640),
Index(['open', 'close', 'high', 'low', 'volume', 'code'], dtype='object')]

将其转化成 DateIndex 类型。

df2.index = pd.DatetimeIndex(df.index)

再次查看结果

df2.axes

转化成功

[DatetimeIndex(['2006-12-18', '2006-12-19', '2006-12-20', '2006-12-21',
'2006-12-22', '2006-12-25', '2006-12-26', '2006-12-27',
'2006-12-28', '2006-12-29',
...
'2009-12-02', '2009-12-03', '2009-12-04', '2009-12-07',
'2009-12-08', '2009-12-09', '2009-12-10', '2009-12-11',
'2009-12-14', '2009-12-15'],
dtype='datetime64[ns]', name='date', length=640, freq=None),
Index(['open', 'close', 'high', 'low', 'volume', 'code'], dtype='object')]

结论:.to_datetime仅转换格式,.DatetimeIndex还能设置为索引

两者在转化格式的功能上效果一样,都可以把字符串对象转换成 datetime 对象。

pd.DatetimeIndex 是把某一列进行转换,同时把该列的数据设置为索引 index。
比如

df2.index = pd.DatetimeIndex(df2["date"])

得到一个以 date 作为索引的结果。

.DatetimeIndex 的问题是原来的 date 列数据仍然存在,形成了重复。

                        date           open    close    high              low            volume    code
date
2003-08-01 2003-08-01 4.997 4.949 5.016 4.949 20709.15 600002
2003-08-04 2003-08-04 4.949 5.045 5.054 4.949 23923.35 600002
2003-08-05 2003-08-05 5.054 5.093 5.131 5.006 35224.00 600002

最终还需要把 date 这一列删掉。

del df2["date"]

才能得到正常数据

               open    close    high    low    volume    code
date
2003-08-01 4.997 4.949 5.016 4.949 20709.15 600002
2003-08-04 4.949 5.045 5.054 4.949 23923.35 600002
2003-08-05 5.054 5.093 5.131 5.006 35224.00 600002

 

原文链接:http://www.jianshu.com/p/4ece5843d383

pandas将字段中的字符类型转化为时间类型,并设置为索引的更多相关文章

  1. 【SQLite】使用replace替换字段中的字符

    使用replace替换字段中的字符 如:替换production表中的specification字段中的两个空格为一个空格: update production set specification = ...

  2. SQL 判断字段中指定字符出现的次数

    原文地址:SQL 判断字段中指定字符出现的次数 原理:将指定字符转换为空,原长度减去转换后的长度就是指定字符的次数. 在做数据处理时遇到一个SQL操作的问题就是有一列关键词字段,字段中包含各种乱七八糟 ...

  3. mysql面试题:字段中@之前字符相同且大于等于2条的所有记录

    公司发了一张面试题给我,题目如下: 在test数据库中有个flow_user表,找出email字段中@之前字符相同且大于等于2条的所有记录 答案: select substring_index(`em ...

  4. sql替换数据库字段中的字符

    UPDATE `table_name` SET `field_name` = replace (`field_name`,'from_str','to_str') WHERE ……说明:table_n ...

  5. mysql命令语句来去除掉字段中空格字符的方法

    mysql有什么办法批量去掉某个字段字符中的空格?不仅是字符串前后的空格,还包含字符串中间的空格,答案是 replace,使用mysql自带的 replace 函数,另外还有个 trim 函数.   ...

  6. js中如何将字符串转化为时间,并计算时间差

    在前台页面开发时通常会用到计算两个时间的时间差,先在此附上实现方法 //结束时间 end_str = ("2014-01-01 10:15:00").replace(/-/g,&q ...

  7. pandas 数据表中的字符与日期数据的处理

    前面我们有学习过有关字符串的处理和正在表达式,但那都是基于单个字符串或字符串列表的操作.下面将学习如何基于数据框操作字符型变量. 同时介绍一下如何从日期型变量中取出年份,月份,星期几等,如何计算两个日 ...

  8. 为什么我们要使用int类型来保存时间类型的数据。

    1.如果数据保存的是timestamp类型那么,如果某个服务器系统时区配置错误,那么悲剧的是通过该服务器写入的时间都是有偏差的.  如果使用int类型保存unix时间戳的话,那么就是在前端展示的时候转 ...

  9. bootstropt-table 大量字段整体表单上传之时间处理

    js 中用$('#addUserForm').serialize(),//获取表单中所有数据 传送到前台 (controller) $.ajax({ type : "POST", ...

随机推荐

  1. Html5 小球键盘移动

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <t ...

  2. zebra/quagga线程分析

    /* 线程按照不同的功能进行分类.有6条双链,分别表示不同类型的线程.将要运行的时候, * 就从不同的链表中取出,添加到ready链表中,运行完成之后,将线程结构体清空放到 * unuse链表中.一般 ...

  3. linux -- 进程的查看、进程id的获取、进程的杀死

    进程查看 ps ax : 显示当前系统进程的列表 ps aux : 显示当前系统进程详细列表以及进程用户 ps ax|less : 如果输出过长,可能添加管道命令 less查看具体进程, 如:ps a ...

  4. VMWare -- 工作模式

    VMWare提供三种工作模式桥接(bridge).NAT(网络地址转换)和host-only(主机模式). 桥接模式 在桥接模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机(主机和 ...

  5. EF修改对象里面的值。。。(对象字段多的时候)

    后台代码 public ActionResult Edit(my m)//my实体类 { testEntities t = new testEntities();//数据库上下文 t.my.Attac ...

  6. 10个开发中常用的PHP代码样例

    一.黑名单过滤 function is_spam($text, $file, $split = ':', $regex = false){ $handle = fopen($file, 'rb'); ...

  7. jQuery-理解事件

    一.理解事件 1.什么是事件 事件是Web浏览器通知应用程序(比如我们的js)发生了某个事情! 我们可以为这些特定的事情,事先安排好处理方案,这样就能够实现互动! 2.事件目标 你可以简单的理解为事件 ...

  8. SharePoint 2010 自定义页面出现“项目可能已被其他用户删除或重命名”问题跟踪

    异常详细信息: Microsoft.SharePoint.SPException: 位置 http://portal/Pages/ShowArticle.aspx?id=19&mylist=8 ...

  9. 根据PV量来确定需要进行压测的并发量

    在实际做压力测试的过程中,我们有时不知道用怎样的并发量比较好,下面是几个用PV量去确定并发量的公式,这个在我们公司是比较适用的,大家可以根据自己的业务进行运算. 方法一:这个方法是我在网上查到的80- ...

  10. ASP.NET MVC传递参数(model), 如何保持TempData的持久性

    一看到此标题,相信你也会.因为路由是可以从URL地址栏传过去的. 但是Insus.NET不想在地址栏传递,还是一个条件是jQuery的Ajax进行POST的.Insus.NET不清楚别人是怎样处理的, ...