
Abstract:18年复活节前的五天,kaggle举办了数据预处理的五个挑战。这里做每天学习到的技术要点的回顾。这篇是第三天的内容,主要是有关日期数据的解析。
日期数据会有好多形式,DDMMYYYY(UK),MMDDYY(US),YYYYMMDD(CN)。Python没法自动识别这些字符是日期,所以统统存为Object的格式。要想使用pandas做日期数据的识别和调用,必须先把这些日期的数据转换成「datetime64」的格式。
设置环境
# modules we'll use
import pandas as pd
import numpy as np
import seaborn as sns
import datetime
# read in our data
earthquakes = pd.read_csv("../input/earthquake-database/database.csv")
landslides = pd.read_csv("../input/landslide-events/catalog.csv")
转化日期为datetime
识别一串字符是日期,并把这串字符转化成2000-01-30,同中国格式。
转化后的数据才能进行pandas.Series.dt.day等操作。
首先需要告诉python这些数据里的时间字符是什么format,举个例子:
- 1/17/07 has the format "%m/%d/%y"
- 17-1-2007 has the format "%d-%m-%Y"
(大写Y表示四位年份,小写y表示两位)
知道了格式后,日期数据Series操作:
# create a new column, date_parsed, with the parsed dates
landslides['date_parsed'] = pd.to_datetime(landslides['date'], format = "%m/%d/%y")
如果原始数据里的时间格式都不统一,可以用一下的命令让python自己猜,但是速度慢,准确率也不保证:
earthquakes.Date_parsed = pd.to_datetime(earthquakes.Date, infer_datetime_format = True)
earthquakes.Date_parsed.head()
对datetime类型数据的操作
数据转化为datetime64以后就可以提取日期了。
# get the day of the month from the date_parsed column
day_of_month_landslides = landslides['date_parsed'].dt.day
把事故发生在一个月份中的日期提取出来,然后看看各个日期和事故发生的关系:
# remove na's
day_of_month_landslides = day_of_month_landslides.dropna()
# plot the day of the month
sns.distplot(day_of_month_landslides, kde=False, bins=31)

网友评论