前言

有一个CSV文件test.csv,其中有一列是datetime类型,其他列是数值列,就像下边这样:

问题

1、读取该CSV文件,把datetime列转换为datetime类型,并将它设置为索引列;

2、筛选时间在15:58到16:03之间的行。

解决

①导入相关模块;

import pandas as pd

②读取test.csv;

data=pd.read_csv('test.csv',encoding='GBK',names=['DT','Changes'],header=0)

结果

data
DT Changes
0 2021/5/22 15:58 -1041.690
1 2021/5/22 15:59 -1041.770
2 2021/5/22 16:01 -1041.050
...
15 2021/5/22 16:20 -997.787
16 2021/5/22 16:22 -994.114
17 2021/5/22 16:23 -1007.710

在看data各列的类型:

data.dtypes
DT object
Changes float64
dtype: object

可见我们的datetime数据读进来之后就变成了object类型,而不是datetime类型

③将DT列由Object类型转化为datetime类型;

data = data.assign( DT=pd.to_datetime(data['DT'] ))

这里用到了两个函数assign()与to_datetime():

assign():插入新列,如果新旧列名相同,会覆盖旧列;

to_datetime():把Series转换为datetime类型。

所以上述代码的意思就是:把data的'DT'列转化为datetime类型,把转换后的DT列覆盖原来的DT列。

如果想看这两个函数的具体用法,可以看:

Python:pandas(三)——DataFrame - ShineLe - 博客园

Python:pandas(二)——pandas函数 - ShineLe - 博客园

④把DT列设置为Index列;

data = data.set_index('DT')

结果

data.set_index('DT')
Changes
DT
2021-05-22 15:58:00 -1041.690
2021-05-22 15:59:00 -1041.770
2021-05-22 16:01:00 -1041.050
...
2021-05-22 16:20:00 -997.787
2021-05-22 16:22:00 -994.114
2021-05-22 16:23:00 -1007.710

类型

data.dtypes
DT datetime64[ns]
Changes float64
dtype: object

转换完成!

⑤筛选时间在15:58到16:03之间的行。

data_choose=data.between_time('15:58','16:03')

结果

                     Changes
DT
2021-05-22 15:58:00 -1041.69
2021-05-22 15:59:00 -1041.77
2021-05-22 16:01:00 -1041.05
2021-05-22 16:02:00 -1041.49

前边之所以做那么多,就是为了最后的筛选,由于between_time只能对index为datetime类型的数据进行筛选,所以前边要把datetime变成index列。

关于between_time,可以参考Python:pandas(三)——DataFrame - ShineLe - 博客园

完整代码

import pandas as pd

data = pd.read_csv('test.csv', encoding='GBK', names=['DT', 'Changes'], header=0)
data = data.assign(DT=pd.to_datetime(data['DT']))
data = data.set_index('DT')
data_choose = data.between_time('15:58', '16:03')

补充

1、将某个datetime数据项转化为datetime.datetime类型

转到上文④,我们再看data及其中索引列DT的数据类型:

data
Changes
DT
2021-05-22 15:58:00 -1041.690
2021-05-22 15:59:00 -1041.770
2021-05-22 16:01:00 -1041.050
...
2021-05-22 16:20:00 -997.787
2021-05-22 16:22:00 -994.114
2021-05-22 16:23:00 -1007.710
data.dtypes
DT datetime64[ns]
Changes float64
dtype: object

发现索引列DT列的数据类型是

datetime64[ns]

它并不是我们常用datetime.datetime类型,那么如何把它转换为datetime.datetime呢?

问题

我们如何要提取倒数第二个索引 2021-05-22 16:22:00,并且把它正确地转为datetime.datetime呢?

解决

提取该项元素,调用它的to_pydatetime()方法,即可得到一个datetime.datetime

dt=data.index[-2].to_pydatetime()

结果

datetime.datetime(2021, 5, 22, 0, 0)

2、将同时包含datetime.datetime和datetime.date类型的索引列中的各项索引,全部转化为datetime.date(如果已经是datetime.date则忽略)

问题

假设我们的数据索引列像下边这样,同时包含datetime和date,很不协调,那么如何把它们全部变成date类型呢?

解决

data_date = map(lambda x:x.to_pydatetime().date() if isinstance(x,datetime) else x,list(backavgDf.index))
data_date = list(data_date)
df = df.assign(date=data_date)
df.set_index('date')

Pandas:从CSV中读取一个含有datetime类型的DataFrame、单项时间数据获取的更多相关文章

  1. java中读取特殊文件的类型

    java中读取特殊文件的类型: 第一种方法(字符拼接读取): public static String getType(String s){ String s1=s.substring(s.index ...

  2. javascript中检测一个变量的类型

    /** * 怎么检测一个变量的类型? * 在js中检测对象类型主要有三种:typeof, instanceof, constructor, 这几种都可以检测对象的类型. * 另外还可以适应jQuery ...

  3. mysql中varchar类型和datetime类型字段进行比较

    我是在mysql5.7版本进行比较 表a的字段order_no和表iwebshop_tmp的字段order_no一样 需要更新iwebshop_member_order表的datetime类型expi ...

  4. [EntityFramework] 对 DateTime 类型使用 SQL 服务器时间或者字段默认值

    DateTime 类型在 SQL 服务器上如果设置了默认值,在 EntityFramework 添加新行的时候想使用该默认值,则不能对新增加的实体的 DateTime 字段赋值. 但是如果新增加的实体 ...

  5. golang中从一个日期开始往后增加一段时间

    废话少说上code, 这个是从当前日期开始,往后增加一个月时间 package main import ( "fmt" "time" ) func main() ...

  6. java中插入myslq的datetime类型的

    java.util.Date d = new java.util.Date(); Timestamp tt=new Timestamp(d.getTime()); ps.setTimestamp(4, ...

  7. 一个I/O线程可以并发处理N个客户端连接和读写操作 I/O复用模型 基于Buf操作NIO可以读取任意位置的数据 Channel中读取数据到Buffer中或将数据 Buffer 中写入到 Channel 事件驱动消息通知观察者模式

    Tomcat那些事儿 https://mp.weixin.qq.com/s?__biz=MzI3MTEwODc5Ng==&mid=2650860016&idx=2&sn=549 ...

  8. sql语句中获取datetime的日期部分或时间部分

    sql语句中获取datetime的日期部分 sql语句中 经常操作操作datetime类型数据.今天在写一个存储过程的时候需要将 一个datetime的值的 日期部分提取出来.网上有许多这方面的介绍. ...

  9. 解决Asp.net Mvc返回JsonResult中DateTime类型数据格式的问题

    问题背景: 在使用asp.net mvc 结合jquery esayui做一个系统,但是在使用使用this.json方法直接返回一个json对象,在列表中显示时发现datetime类型的数据在转为字符 ...

随机推荐

  1. ES6新增的数组的方法

    forEach forEach()会遍历数组, 循环体内没有返回值,forEach()循环不会改变原来数组的内容, forEach()有三个参数, 第一个参数是当前元素, 第二个参数是当前元素的索引, ...

  2. vi与vim编辑器与解决vim编辑异常

    目录 一:vi与vim编辑器 二:解决vim编辑异常 一:vi与vim编辑器 vim是vi的升级版编辑器,就是vim比vi丰富一些. 1.安装vim 命令 yum install vim -y 2.打 ...

  3. 配置Nginx使用Active Directory 做认证

    配置Nginx使用AD做认证 nginx.conf 配置 http { ldap_server ldap { url ldap://xxx:389/DC=test,DC=com?sAMAccountN ...

  4. HashMap相关

    final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) { Node<K,V>[] ta ...

  5. 学习JAVAWEB第十天

    今天内容: 运行servlet到崩溃,一直是404 明天继续运行

  6. linux网卡知识

    使用 Vim 文本编辑器来配置网卡设备的绑定参数.网卡绑定的理论知识类似于前面学习的 RAID 硬盘组,我们需要对参与绑定的网卡设备逐个进行"初始设置".需要注意的是,这些原本独立 ...

  7. CKKS Part3: CKKS的加密和解密

    本篇文章翻译于CKKS EXPLAINED, PART 3: ENCRYPTION AND DECRYPTION,主要介绍CKKS方案的加密和解密. 介绍 在上一篇 CKKS Part2: CKKS的 ...

  8. AtCoder AGC003 简要题解

    A 首先横向和纵向互相独立,因此只考虑横向的情况. 那么显然只要不只往一边走都一定存在一种构造方式,直接判断即可,复杂度 \(\mathcal{O}(|S|)\). B 首先相邻两个数同时配对两次可以 ...

  9. centos7 安装yum源

    centos7的服务器,没有yum,没有wget命令真的寸步难行,经过总结和查询,现在算搞定了,把经验总结一下,以免大家再浪费时间去找原因: 安装yum需要wget安装yum的rpm包,所以前提是先有 ...

  10. ARP协议工作原理

    转载请注明来源:https://www.cnblogs.com/hookjc/ ARP数据包根据接收对象不同,可分为两种:    1. 广播包(Broadcast).广播包目的MAC地址为FF-FF- ...