本文参考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. HttpClient Post Form提交文件/二进制数据

    HttpClient httpClient = HttpClients.createDefault(); HttpPost httppost = new HttpPost(url); Multipar ...

  2. linux系统的权限介绍

    让我们用t o u c h命令创建一个文件:$ touch myfile现在对该目录使用ls -l命令: 我们已经创建了一个空文件,正如我们所希望的那样,第一个横杠告诉我们该文件是一个普通文件.你将会 ...

  3. 《OD学hadoop》mac下使用VMware Fusion安装centos

    一. NAT模式网络访问 (1)在linux中输入命令ifconfig查看网络信息 (2)在mac中输入命令ifconfig查看网络信息 lo0: flags=<UP,LOOPBACK,RUNN ...

  4. pl/sql programming 05 循环迭代处理

    使用循环应考虑的因素 1. 循环什么时候结束 2. 什么时候测试是否该结束循环 3. 采用这种循环的原因 1. 普通循环(简单循环) 使用场合, 不能确定循环执行多少次, 要求循环至少执行一次. 另外 ...

  5. Spring安全框架 Spring Security

    Spring Security 的前身是 Acegi Security ,是 Spring 项目组中用来提供安全认证服务的框架. Spring Security  为基于J2EE企业应用软件提供了全面 ...

  6. UVa 10935 (水题) Throwing cards away I

    直接用STL里的queue模拟即可. #include <cstdio> #include <queue> using namespace std; ; int discard ...

  7. UVa 10635 (LIS+二分) Prince and Princess

    题目的本意是求LCS,但由于每个序列的元素各不相同,所以将A序列重新编号{1,2,,,p+1},将B序列重新编号,分别为B中的元素在A中对应出现的位置(没有的话就是0). 在样例中就是A = {1 7 ...

  8. [反汇编练习] 160个CrackMe之022

    [反汇编练习] 160个CrackMe之022. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  9. Heritrix源码分析(十二) Heritrix的控制中心(大脑)CrawlController(一)(转)

    本博客属原创文章,欢迎转载!转载请务必注明出处:http://guoyunsky.iteye.com/blog/650694 本博客已迁移到本人独立博客: http://www.yun5u.com/ ...

  10. shell 里把命令的输出赋给变量 以及变量的使用

    //获取本月1号 的命令 date +%Y-$m-1 shell脚本  把时间命令的值赋给变量 并使用 #! /bin/sh #赋值 time=$(date +%Y-%m-) #使用变量(转换成时间戳 ...