前言
有一个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')