python课程丶优达学城_《数据分析入门—优达学城》学习python导入数据并改正数据类型...

利用python学习数据分析之数据导入

本文为Udacity数据分析入门课程学习笔记,数据源为课程附件资料3个csv表格记录Udacity的学员注册信息,学员每日参与行为数据,项目记录,课程主要目标学习对这3个数据集进行数据分析练习,学习数据分析思维及基本出来方法。

练习环境:Anaconda 下的Jupyter Notebookcsv文件的导入,使用unicodecsv模块读取数据;

加载unicodecsv包并定义一个读取csv文档的函数read_csv,实现传入文件名可返回文件列表:

import unicodecsv

def read_csv(filename):

with open(filename,'rb') as f: #打开传入文件路径文件with

reader = unicodecsv.DictReader(f)

return list(reader)

分别传入3个文件名,读取csv文件(其实读取csv文件,用pandas包的read_csv/read_table

更方便,已有现场方法可以使用。

查看每个表的第一条记录,看到表中字段存储数据类型,分析3个表之间的关联方式。

可看到表中返回的都是文本类型的,要进行下一步的数据处理就需要修正相应转换类型

2.修改表格内数据类型

修改列的数据类型,主要修改将文本形式的时间记录变为时间类型,’整型‘变为变为int,‘bool’的变为bool。

from datetime import datetime as dt #导入一个时间处理包

'''这里定义两个函数,分别将文本类型转换为时间/整型数据,将空值转化为Null'''

def prase_data(data):

if isinstance(data, unicode): #这里加多一层判断,因为数据源了可能有混合文本和时间类型

if data == '':

return None

else:

return dt.strptime( data, '%Y-%m-%d') #datatime的strptime方法出来文本时间为相应格式

else:

if data =='':

return None

else:

return data

def prase_int(i):

if i == '':

return None

else:

return int(i)

然后对表格需要转换的列,都应用相应的函数:

for sub_enr in enr:

sub_enr['cancel_date'] = prase_data(sub_enr['cancel_date'])

sub_enr['days_to_cancel'] = prase_int(sub_enr['days_to_cancel'])

sub_enr['join_date'] = prase_data(sub_enr['join_date'])

sub_enr['is_canceled'] = sub_enr['is_canceled']=='True' #转换bool型用这样方式转化即可

sub_enr['is_udacity'] = sub_enr['is_udacity']=='True'

for sub_pro in pro:

sub_pro['completion_date']=prase_data(sub_pro['completion_date'])

sub_pro['creation_date']=prase_data(sub_pro['creation_date'])

for sub_dai in dai:

sub_dai['lessons_completed']=int(float(sub_dai['lessons_completed'])) #表格中完成课程数为'0.0',需先转化浮动型数字再娶整数

sub_dai['projects_completed']=int(float(sub_dai['projects_completed']))

sub_dai['total_minutes_visited']=float(sub_dai['total_minutes_visited'])

sub_dai['utc_date']=prase_data(sub_dai['utc_date'])

查看转换格式后的每个表:

看到返回结果可以看到,已经修正好非文本类型,转换为相应的数据类型。

不过看到dai表格中’acct‘列名,与其他两个表不一样’account_key‘,都是记录账号的,在此需要对dai中的列进行重命名,统一相同内容的列名;

for sub_dai in dai:

sub_dai['account_key']=sub_dai['acct'] #创建一个新的列名,并将原来acct的值传递给它

del sub_dai['acct']

查看修改后dai[0]

已经完成csv数据的加载和基本数据类型转换,统一了相同的列名。

下一步可以初步探索数据了

总结读取csv文件,可以用unicodecsv包,利用unicode.DictReader方法(返回一个字典)自己定义一个read_csv()函数,传入文件名即可读取【不过直接使用pandas包更便捷,直接使用read_csv/read_table方法】

数据类型转换,加载datetime,使用strptime对文本伪时间类型转换为python的时间类型,同理转换int,灵活转化bool型的技巧

修改表格列名的方式,创建新列名,将原列传递赋值给新列明,删除原来列名

对表格的每行进行巡遍,使用for语句

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值