今天的内容是解析数据,内容比较简单,几句话可以概括。拿到数据之后先判断数据类型(一般都是string类型),然后把string的数据类型转换为相应的形式,比如日期,需要转换为日期的类型,因为如果你想拿到这个日期类型的天,总不能用string类一点点的截取,如果已经转换为datetime类型,可以 使用数据.dt.day来获取到天数。最后通过画图,来查看自己转换的数据是否正确
具体步骤
1、导入数据
# 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")
volcanos = pd.read_csv("../input/volcanic-eruptions/database.csv")
# set seed for reproducibility
np.random.seed(0)
2、查看数据类型
# print the first few rows of the date column
print(landslides['date'].head())
可以看到最后有个dtype:object
或者通过下面这个方法,得到的结果一样
# check the data type of our date column
landslides['date'].dtype
pandas使用object类型存储各种各样的数据类型,但是当你看到object类型是,一般都是string类型
如果存储的是datetime类型是,会返回datetime64
虽然你能看出这是个datetime类型,但是机器却只认得它是string类型的
3、转换我们的数据为datetime类型
我们通过查看日期数据格式是什么样的,通过指定格式,可以把string类型转换为日期类型
# create a new column, date_parsed, with the parsed dates
landslides['date_parsed'] = pd.to_datetime(landslides['date'], format = "%m/%d/%y")
* 1/17/07 has the format "%m/%d/%y"
* 17-1-2007 has the format "%d-%m-%Y"
# print the first few rows
landslides['date_parsed'].head()
已成功转换为日期类型
如果你使用这种方式转换数据时出现错误,可能是因为有多重数据格式存储在中间,这个时候就应该用
landslides['date_parsed'] = pd.to_datetime(landslides['Date'], infer_datetime_format=True)`
方法来让电脑自己推断进行转换数据。但是我们不经常使用这种方法,一是因为pandas不总是能辨别出正确的数据格式,特别是有些具有创造性的数据格式时,第二是因为这样会比较慢(我操作了一下,发现并不慢)
对于earthquackes进行数据转换时使用第一种方法会发现,提示有65个数据为转换,应该就是有多种数据类型,使用第二种方法时成功转换,而且发现速度并不慢。
4、选择月中的天数
当我们使用string类型的数据进行提取天数时,发现会报错
# try to get the day of the month from the date column
day_of_month_landslides = landslides['date'].dt.day
提示是只能处理datetime类型
可以看出只提取日期中的天数
5、画天数来检查数据解析是否正确
日期解析最大的危险就是把day和month搞混,我们通过画图来观察我们的数据是否正确,我们话出的图一般来说基本上是均匀分布的,如果要是弄混的话,应该前12天的数据应该特别大
# 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=True, bins=31)
#kde表示是否划线
#bins表示有31个直方