默认情形下,利用read_csv读取csv文件时,pandas无法自动将字段转换为日期类型。
如果数据不能转换为日期类型,后续会给我们的剖析事情带来很多麻烦,我们就无法利用到pandas为我们带来的关于日期类型的各种便利。

下面我们通过一个例子演示如何精确的解析日期字段。
本例中,我们利用的csv文件如下所示:

程序的源代码如下所示:

phpcsv时间格式pandas中readcsv时处置datetime类型介绍 Ruby

程序的第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试图利用更快的算法解析日期格式。

本人正在积极积累粉丝,如果你认为文章值得收藏,希望您能帮我点一下“关注”。