本文参考Paul Barry所著的《Head First Python》一书,参考代码均可由http://python.itcarlow.ie/站点下载。本文若有任何谬误希望不吝赐教~

二. 代码模块
 
1. 准备学习
 
(1)数据读取
with open(james.txt) as jaf: #打开文件
    data = jaf.readline() #读数据行
 james =data.strip().split(',') #将数据转换为列表
 

说明:data.strip().split(',')叫做方法串链,strip()应用到data中的数据行,去除字符串中所有的空白符,处理后的结果由第二个方法split(',')处理,split(',')表示将结果以,形式分割开,返回列表。

 
(2)数据清理
定义函数sanitize(),将各个选手成绩的列表格式统一为mins.secs格式
def sanitize(time_string):
    if '-' in time_string:
        splitter = '-'
    if ':' in time_string:
        splitter = ':'
    else:
        return(time_string)
(mins,secs) = time_string.split(splitter)
return(mins + '.' + secs)
 
说明:split是内置函数,表示字符串的分解
 
(3) 转换列表---推导列表
分别举例普通列表转换方法与利用推导列表的方式:
clean_mikey = [] #列表创建
for each_t in mikey: #迭代
    clean_mikey.append(sanitize(each_t)) #转换与追加

等价于

clean_mikey = [sanitize(each_t) for each_t in mikey]
 
说明:sanitize()为自定义的一个数据清理函数,内置函数sorted是对整个列表排序
 
(4) 删除重复数据--not in
列表操作方法:
unique_james = []
for each_t in james:
    if each_t not in unique_james:
        unique_james.append(each_t)
集合操作方法:(python集合突出特点,就是集合中数据项的无序性,且不允许重复)
示例: 
distances = set(james)
 
(5)“分片”,访问列表中多个列表项

print(sorted(set([sanitize(t)] for t in james]))[0:3])

 

(6)将多个重复代码改为函数

def get_coach_data(filename):
    try:
        with open(filename) as af:
            return(data.strip().split(','))
    except IOError as ioerr:
        print('File error:' + str(ioerr))
        return(None)
 
2. 定制数据对象
 
(1)新数据格式,James2.txt,Julie2.txt,Mikey2.txt,Sarah2.txt,文件分别打开如下:(全名, 出生日期, 训练成绩)
James Lee,2002-3-14,2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22,2-01,2.01,2:16
Julie Jones,2002-8-17,2.59,2.11,2:11,2:23,3-10,2-23,3:10,3.21,3-21,3.01,3.02,2:59
Sarah Sweeney,2002-6-17,2:58,2.58,2:39,2-25,2-55,2:54,2.18,2:55,2:55,2:22,2-21,2.22
Mikey McManus,2002-2-24,2:22,3.01,3:01,3.02,3:02,3.02,3:22,2.49,2:38,2:40,2.22,2-31
 
(2)数据抽取:(以Sarah为例)
Sarah = get_coach_data('sarah2.txt')
(sarah_name,sarah_dob) = sarah.pop(0),sarah.pop(0)
pop(0)调用将删除并返回列表最前面的数据项,并赋值给指定变量姓名和出生日期
 
(3)使用字典关联数据,字典是一种内置的数据结构,允许将数据和键而不是数字关联,这样可以使内存中的数据与实际数据的结构保持一致。
比如,键                   关联的数据
        Name     ——> Sarah Sweeney
        DOB      ——> 2002-6-17
        Times    ——> 2:58,2.58,2:39,2-25,2-55,2:54,2.18,2:55,2:55,2:22,2-21,2.22
创建字典的方式:
          大括号创建:cleese = {}
          工厂函数:   palin = dict()
增加数据两种方式:
          cleese['Name'] = 'John Cleese'
          palin = {'Name': 'Michael Palin'}
 
(4)应用:
        sarah_data = {}
        sarah_data['Name'] = sarah.pop(0)
        sarah_data['DOB'] = sarah.pop(0)
        sarah_data['Times'] = sarah
        print(sarah_data['Name' + "'s fastest times are: " + str(sorted(set[sanitize(t) for t in sarah_data['Times']]))[0:3]))
 
(5)一次性完成字典的创建,并返回字典
def get_coach_data(filename):
    try:
        with open(filename) as f:
            data = f.readline()
        templ = data.strip().split(',')
        return({'Name':templ.pop(0),
                    'DOB':templ.pop(0),
                     'Times':str(sorted(set([sanitize(t) for t in templ]))[0:3])})
    except IOError as ioerr:
        print('File error:' + str(ioerr))
        return(None)
 
(6)将代码及其数据打包在类中
class Athlete:
    def __init__(self,a_name,a_dob,a_times=[]):
        self.name = a_name
        self.dob=a_dob
        self.times=a_times
   
   def top3(self):
       return(sorted(set([sanitize(t) for t in self.times]))[0:3])
   
   def get_coach_data(filename):
       try:
        with open(filename) as f:
            data = f.readline()
        templ = data.strip().split(',')
        return(Athlete(templ.pop(0),templ.pop(0),templ)
     except IOError as ioerr:
        print('File error:' + str(ioerr))
        return(None)
 

(7)类调用与结果输出

james = get_coach_data('james2.txt')
结果输出:
James Lee's fastest times are: ['2.01','2.16','2.22']
 
下一节课讲类的继承

Python的数据处理学习(二)的更多相关文章

  1. Python入门基础学习 二

    Python入门基础学习 二 猜数字小游戏进阶版 修改建议: 猜错的时候程序可以给出提示,告诉用户猜测的数字偏大还是偏小: 没运行一次程序只能猜测一次,应该提供多次机会给用户猜测: 每次运行程序,答案 ...

  2. Python的数据处理学习(三)

    三.类的继承   Python 的class可以允许从零开始创建一个定制类,就像文章(二)创建Athlete类一样,也可以通过继承现有的其他类类创建一个类,这也包括用List.set和dict提供的p ...

  3. python flask框架学习(二)——第一个flask程序

    第一个flask程序 学习自:知了课堂Python Flask框架——全栈开发 1.用pycharm新建一个flask项目 2.运行程序 from flask import Flask # 创建一个F ...

  4. Python - 3.6 学习二

    Python 的高级特性 切片 对于指定索引范围取值的操作,Python提供了slice方法,类似于Excel中数据透视表的切片器. >>> L = ['Michael', 'Sar ...

  5. python数据处理技巧二

    python数据处理技巧二(掌控时间) 首先简单说下关于时间的介绍其中重点是时间戳的处理,时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00 ...

  6. Python学习二:词典基础详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...

  7. python --- 字符编码学习小结(二)

    距离上一篇的python --- 字符编码学习小结(一)已经过去2年了,2年的时间里,确实也遇到了各种各样的字符编码问题,也能解决,但是每次都是把所有的方法都试一遍,然后终于正常.这种方法显然是不科学 ...

  8. Python基础学习二

    Python基础学习二 1.编码 utf-8编码:自动将英文保存为1个字符,中文3个字符.ASCll编码被囊括在内. unicode:将所有字符保存为2给字符,容纳了世界上所有的编码. 2.字符串内置 ...

  9. python 数据处理学习pandas之DataFrame

    请原谅没有一次写完,本文是自己学习过程中的记录,完善pandas的学习知识,对于现有网上资料的缺少和利用python进行数据分析这本书部分知识的过时,只好以记录的形势来写这篇文章.最如果后续工作定下来 ...

随机推荐

  1. U3D NGUI改变GameObject Activity闪烁的问题

    不是关闭再激活GameObject会闪烁,而是再激活时,NGUI渲染步骤不一致导致的闪烁. 并且文字激活后渲染要慢一帧,如果延迟一帧处理,又会导致精灵图片快一帧,图片重叠.这个测试结果不一定准确,先记 ...

  2. dataTables表格分页排序等交互

    官网: https://www.datatables.net/ 中文参考网站: http://datatables.club/ datatables+bootstrap示例: http://sandb ...

  3. MTK6577+Android环境变量

    1. 环境变量机器对应的路径 $project = hsimobile77_ics2 $platform=mt6577 $(PRODUCT_OUT)=\out\target\product\$proj ...

  4. jquery仿天猫商城左侧导航菜单

    之前看到有博友写了一个仿天猫商城左侧导航菜单,可惜不提供免费下载,也没有代码.以前自己也写过类似的效果,只是都是一小块一小块的,现在重新拼凑.我将一步一步的实现拼凑过程,希望对你有所帮助. Demo在 ...

  5. [转]JavaScript 的性能优化:加载和执行

    原文链接:http://www.ibm.com/developerworks/cn/web/1308_caiys_jsload/index.html?ca=drs- JavaScript 的性能优化: ...

  6. swift2.0 Cannot assign a value of type '[CFString]' to a value of type '[String]'

    Cannot assign a value of type '[CFString]' to a value of type '[String]' 代码示例如下: picker.mediaTypes = ...

  7. vijos 1379 字符串的展开

    23333333333333333 #include<iostream> #include<cstdio> #include<cstring> #include&l ...

  8. UIView的clipsToBounds属性,layoutSubViews及触摸事件传递(默认情况下)总结

    一.UIView的clipsToBounds属性 * 默认情况下,超出父控件尺寸范围的子控件还是可见的 * 如果设置父控件的clipsToBounds=YES,就会裁剪掉超出父控件尺寸范围内的子控件, ...

  9. Linux/Unix shell 脚本监控磁盘可用空间

    Linux下监控磁盘的空闲空间的shell脚本,对于系统管理员或DBA来说,必不可少.下面是给出的一个监控磁盘空间空间shell脚本的样本,供大家参考. 1.监控磁盘的空闲空间shell脚本 robi ...

  10. 构建高性能web站点--读书大纲

    用户输入你的站点网址,等了半天..还没打开,裤衩一下就给关了.好了,流失了一个用户.为什么会有这样的问题呢.怎么解决自己站点“慢”,体验差的问题呢. 在这段等待的时间里,到底发生了什么?事实上这并不简 ...