kaggle入门笔记(Day3:Parsing Dates)

今天的内容是解析数据,内容比较简单,几句话可以概括。拿到数据之后先判断数据类型(一般都是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个直方



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值