Python数据分析基础ReadingDay2_容器

reading Foundations for Analysis with Python Day2

这篇笔记是阅读《Python数据分析基础》的第二篇,第一篇笔记讲了关于本书的简介、Python3运行环境与交互、四种数值类型、字符串以及日期类型。今天这篇主要讲Python中保存数据的容器以及简单文件读写。

Python数据分析基础封皮

目录

  • 列表
  • 元组
  • 字典
  • 文件读写入门

列表

第一篇文章里我们构建的都是单个的变量,如语句 a=3 ,得到的变量a只是一个数值,如果我们有一组数字要处理呢?逐条声明a=1,b=2,c=3……?要表示一组数,在编程语言中可以用数组来作为容器装载,Python里面

a=[10,20,30,40,50]

用中括号将一组数归在一起,得到的就是一个列表,Python的列表(list)与其他编程语言的数组最大到不同就是列表里面的元素类型可以是任意的,不需要是同一种类型,列表里可以装整数、复数、字符串、甚至下面讲到的元组、字典,例如下面语句都是合法的:

list0=list([1,2,3,4,5]) #也可以用list()创建
list1=[3.14,2+5j,'lyndon','2018-3-14'] #有小数、复数、字符串类型
list2=[5,[1,2],(1,3),{'e':2.718,'pi':3.14159}]
list3=[[1,2,3],[4,5,6],[7,8,9]] #创建二维数组,数据分析中经常要处理的是多维数组

列表的创建就是将元素用方括号(英文的方括号[]不是中文的【】)括起来,元素之间用英文逗号隔开,例如 ['元素1','元素2','元素3']。
现在我们学会了创建一个列表,之后自然是怎么获取某个位置的值,总不能我把一些元素放到列表里,现在想拿出来却不知道怎么拿吧?这就涉及到列表的索引了。和其他语言一样,通过下标索引某个位置的值(所以如果你有其他语言基础这里就可以跳过了,如果没有学过其他语言,知道了Python列表的索引方式,之后学其他语言数组的索引页不在话下)。

print('a[0]=',a[0]) #下标从0开始而不是1,第一个元素是a[0]
print('a的最后一位:',a[-1]) #Python可以用-1索引到最后一位,这个在其他语言不适用
#其他语言想要索引最后一位怎么办?一般是通过获取数组长度len_a,然后a[len_a-1]

a[0]= 10
a的最后一位: 50
当索引超出范围时,会报错:

print(a[9]) #报错信息如下:
IndexError                                Traceback (most recent call last)
<ipython-input-23-5ba9f810340c> in <module>()
----> 1 print(a[9])

IndexError: list index out of range

错误提示中的 IndexError: list index out of range 意思还是很明显的,索引超出范围了。
不像其他语言的数组创建后是定长的(当然C语言后动态链表,这个不在此处展开了),例如声明了一个长度为20的数组,超出20个数就不能加进来了,Python的列表支持用 append(x) 在尾部增加元素,x可以是任意的数据类型,extend(k) 可以将迭代器k中的元素追加到列表里,k一般为列表、元组,当k是字典时,加入的是字典的键。上述两个函数都是加到末尾,那么能不能加到某个位置呢?可以用 insert(idx,val) 达到目的。idx是索引值,val是要插入的值。

  • append() #末尾增加元素
  • extend() #末尾增加多个元素
  • insert(i,v) #插入i位置一个元素v
  • remove() #删除指定元素
  • pop() #弹出某个位置的元素
  • index() #某个值第一次出现的位置
  • sort() #在原处排序,与sorted()区分
  • reverse() #反转列表
print('原来的a:',a)
a.append('append str')
a.extend(['6',70])
a.insert(1,100)
print('之后的a:',a)
a.reverse()
print('反转1:',a)
print(a[::-1]) #除了书中提到的用reverse之外,还可以用 [::-1]反转,称作切片

输出:

原来的a: [10, 20, 30, 40, 50]
之后的a: [10, 100, 20, 30, 40, 50, 'append str', '6', 70]
反转1: [70, '6', 'append str', 50, 40, 30, 20, 100, 10]
[10, 100, 20, 30, 40, 50, 'append str', '6', 70]

列表包含的处理方法有很多,要应用好请多练习。具体要实现某种需求又不知道有没有内置的方法去实现是,可以尝试搜索问题,关于列表的排序、深复制/浅复制本篇笔记不进行说明。

元组

元组和列表有很多相似之处,也可以装入多种类型的数据,可以通过下标索引,书中说两者最大的不同在于元组的值不能修改,例如下面的代码,企图修改一个元组会出错。

t1=(1,2,3,'k')
t1[2]=4

输出:

TypeError                                 Traceback (most recent call last)
<ipython-input-25-d595ad9311f1> in <module>()
      1 t1=(1,2,3,'k')
----> 2 t1[2]=4

TypeError: 'tuple' object does not support item assignment

这个特性一般是将它作为一个常量来使用,不能改元素值,会更安全。因为元组其他特性和列表相似或相同,就不进行仔细的说明了。

字典

字典也是Python里面非常重要的容器,它是通过键值对来联系两个元素的,类似于数学中函数的概念,一个x对应1个y,关于键-值存储、散列值等概念,建议翻看原书或查其他资料。创建字典(dict)的方法如下:

d1={'key1':1,'key2':2,'key3':[1,2]}
d2={'k1':'v1','name':{'fn':'tom','ln':'holland'},'y':[1,2]}
#多个镶套的字典可以构成前端很重要的数据格式json

in or not in

in是Python里较常用的关键字,用in可以判断元素是否在容器里,例如判断元素10是否在列表a里。get通常用来获取字典中的元素。

print('yes') if 10 in a else print('no')
print(d1.get('key3'))
print(d1.get('k3'))

输出:

yes
[1, 2]
None

文件读写入门

书中第一章讲的是比较基础的文件读写,在之后三章会详细讲解csv、Excel、MySQL文件数据的读写。 Python中简单读文件还是比较容易的,通过open()可以打开文件,因为第二章会具体讲解,这里主要实现两个简单的例子。一个是传统的读取方式,另一个是用with语句,从安全性来讲,with是更好的,一般推荐使用with进行文件的读写,可以不用写close(),但写其他语言的同学记得用其他语言的时候不要忘记写close()语句。

#假设 文件目录下有一个chpOneFile.txt 的文件
fileName='chpOneFile.txt'
#用绝对路径请写:
#fileName='D:/PythonBooks/chpOneFile.txt'
freader=open(fileName,'r') #r 代表读取
for line in freader:
    print(line,end='') #按行输出
freader.close() #关闭文件
print('closed')
#用with的方式

with open(fileName,'r') as f:
    for line in f:
        print(line,end='') #按行输出

写文件

# 文本读取和写入有时候会涉及编码问题

#写文件
alst=['a','b','c']
with open('fileForWrite.txt','a+') as wf:
    for i in alst:
        wf.write(i) #逐行写入

这篇笔记主要讲了三种数据结构(列表、元组、字典)以及简单的文件读取和写入,下一篇会深入文本文件的读取和写入,csv就是数据科学中非常常用的一种数据表示方式。本篇笔记对三种数据结构并没有讲得很全面,因为要展开讲可以讲很多内容,列表的知识在一些Python教材里就是一个章节的内容了。书中还讲了一些拓展性的数据结构,如栈、队列、树和图,这部分知识在第9章。多练习是很有必要的,有任何建议欢迎提出。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容