热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pandas如何把时间转成index_pandas将“字符类型的日期列”转化成“时间戳索引(DatetimeIndex)”...

假设目前已经引入了pandas,同时也拥有pandas的DataFrame类型数据。importpandasaspd数据集如下df.head(3)dateopencl

假设目前已经引入了 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",即字符类型。

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



推荐阅读
  • sqlserver动态分区方案例子
    sqlserver动态分区方案例子当我们存储的数据量比较大时,比如超过千万,上亿级别时单纯的使用索引可能效果不明显了,此时我们可以考虑采 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 本文探讨了Java中char数据类型的特点,包括其表示范围以及如何处理超出16位字符限制的情况。通过引入代码点和代码单元的概念,详细解释了Java处理增补字符的方法。 ... [详细]
  • 本文探讨了如何在Python中计算两个给定时间字符串(格式为HH:MM:SS)之间的时间差,并提供了详细的代码示例及解决方案。 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 在PHP后端开发中遇到一个难题:通过第三方类文件发送短信功能返回的JSON字符串无法解析。本文将探讨可能的原因并提供解决方案。 ... [详细]
  • 深入解析动态代理模式:23种设计模式之三
    在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ... [详细]
  • Python 工具推荐 | PyHubWeekly 第二十一期:提升命令行体验的五大工具
    本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ... [详细]
  • 本文深入探讨了 Java 中 LocalTime 类的 isSupported() 方法,包括其功能、语法和使用示例。通过具体的代码片段,帮助读者理解如何检查特定的时间字段或单位是否被 LocalTime 类支持。 ... [详细]
  • 本文详细介绍了 Python 中的条件语句和循环结构。主要内容包括:1. 分支语句(if...elif...else);2. 循环语句(for, while 及嵌套循环);3. 控制循环的语句(break, continue, else)。通过具体示例,帮助读者更好地理解和应用这些语句。 ... [详细]
  • 本文探讨了如何利用HTML5和JavaScript在浏览器中进行本地文件的读取和写入操作,并介绍了获取本地文件路径的方法。HTML5提供了一系列API,使得这些操作变得更加简便和安全。 ... [详细]
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
  • springMVC JRS303验证 ... [详细]
  • 本文详细介绍了在使用Socket进行网络编程时,遇到链接器错误`undefined reference to WSAStartup@8`的解决方案,适用于多种开发环境。 ... [详细]
  • 本文档提供了如何使用C#代码从客户订单中提取产品信息的方法,适用于需要处理和分析产品数据的应用场景。 ... [详细]
author-avatar
徐州九七医院沁尿外科1
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有