默认情形下,利用read_csv读取csv文件时,pandas无法自动将字段转换为日期类型。如果数据不能转换为日期类型,后续会给我们的剖析事情带来很多麻烦,我们就无法利用到pandas为我们带来的关于日期类型的各种便利。
下面我们通过一个例子演示如何精确的解析日期字段。本例中,我们利用的csv文件如下所示:
程序的源代码如下所示:
程序的第16行,我们利用read_csv正常读取上面的csv文件,然后在程序的第20行,我们打印出DataFrame各字段的数据类型。
通过打印结果,我们可以看出,字段韶光1和韶光2都没有被解析成韶光类型。如果我们把程序第19行的注释打开再实行,这时由于字段不是韶光类型,我们没有办法利用pandas的韶光类型进行比较。
为了能够精确的解析韶光类型,我们须要利用read_csv供应的parse_dates参数。parse_dates参数可以接管一个整型数值的列表,整数代表字段的顺序,pandas规定从0开始记数。因此对付上面的DataFrame,parse_dates该当为[1,2],例如程序的第21行,这时我们可以将这两个字段解析为日期类型。程序的第24行,我们打印了DataFrame的数据类型。
现在我们可以把稳到韶光1和韶光2字段已经被解析成韶光类型。而且程序的第23行,我们可以直接对韶光1字段进行比较。筛选出的数据为大于2021-02-05。
上面的csv文件中的日期数据是yyyy-mm-dd格式的,有的时候我们还会碰着yyyymmdd格式。例如下图所示:
如果不指定解析日期字段,pandas就会把字段识别成整型类型。程序的源代码如下所示:
程序的第16行至20行的实行结果如下所示:
在程序第21行parse_dates指定为“韶光1”,parse_dates参数不仅可以接管整型数值的字段顺序,也可以接管字段名称的列表。
通过实行结果,我们可以看到字段类型已经转换成日期类型,而且在print DataFrame时,展示的效果已经由20210211变成2021-02-11。
末了我们再看一个例子。如果我们熟年份字段,月份字段,日字段,我们也可以通过组合,转换成一个日期类型字段。
程序的源代码如下所示:
parse_dates参数如果为列表的列表,例如程序第16行,read_csv会把对应的字段组合成新的韶光字段。新的字段名称为原有字段名称以下划线组合而成。
如果大家对组合而成的新字段的字段名称不是很满意,还可以向parse_dates参数传入一个字典类型,这样就可以直接指定字段名称,例如程序第19行所示,我们在组合时间字段的同时,将字段名称命令为“韶光2”。程序的实行结果如下所示:
默认情形下,read_csv会在组合成新字段后,删除原有字段,如果我们想保留原有字段,须要指定keep_date_col为True,例如程序第22行。下图为程序的实行结果:
末了我们提一下infer_datetime_format参数。如果infer_datetime_format为True,同时启用parse_dates参数,pandas试图利用更快的算法解析日期格式。
本人正在积极积累粉丝,如果你认为文章值得收藏,希望您能帮我点一下“关注”。