数据清洗之如何解析日期数据

Kaggle: Data Cleaning Challenge: Parsing Dates

一、确认日期字段的数据格式,是否被识别为“日期”

data['date'].dtype

二、日期格式

pd.to_datetime(data['date'])

PS

当需要转换的日期格式有多种时,会有报错。


这个时候可以增加一个error参数,赋值coerce,将无法识别的日期格式转化为NaT(Not a Time 非时间空值):

earthquakes['date_parsed'] = pd.to_datetime(earthquakes['Date'], format = "%m/%d/%Y", errors='coerce')
from:pandas官方文档

另外format参数赋值对于字母大小写有严格的要求,一开始我写的是%m/%d/%y y是小写,所以出现了下面的报错。


根据python官方文档的解释,两者含义有区别。%y 是指两位年份,%Y是指四位年份。
from: python官方文档

https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior

三、提取日期数据中的日、月、年

对于datetime格式的日期数据可以使用dt.day()方法提取日的数据
同比月份(month)和年份(year)

四、再次检查解析的正确性

绘制一个月中各天的直方图,值在1到31之间,并且不存在一个月的某些天比其他几天更普遍的假设,因此分布相对均匀。

day_of_month_earthquakes = earthquakes['date_parsed'].dt.day
day_of_month_earthquakes = day_of_month_earthquakes.dropna()
sns.distplot(day_of_month_earthquakes, kde=False, bins=31)
31号相对于其他少了一半左右,因为一年中有5个月是没有31号的

PS

将unix时间戳转化日期和时间的格式,是我们在实际分析项目时经常会遇到的情况。多数情况下,10位的unix时间戳都是以s位单位,13位的时间戳都是以ms为单位。to_datetime函数描述单位的参数unit默认是ms,而非s,所以对于10位的时间戳,需要给unit赋值为“s”

pd.to_datetime(data[date], unit='s')

你可能感兴趣的:(数据清洗之如何解析日期数据)