《用python进行数据分析 第二版》
示例代码:https://github.com/wesm/pydata-book
本书大部分内容关注的是基于表格的分析和处理大规模数据集的数据准备工具
ipython
?的用法
显示函数信息
image.png
image.png
??的用法
显示函数内容
image.png
%run命令
使用%run命令在ipython中运行一个程序
image.png
(Hanoi.py为本地的一个文件)
文件中所定义的所有变量都可以在ipython中访问
ipython常用快捷键
image.pngipython中的魔术命令
image.png
模块学习
bisect
bisect.insort(),插入元素后保持原列表有序
image.pngenumerate函数
接收一个可迭代对象,返回其中每个值和它的小标(以元组的形式)
image.png
sorted函数
不改变原序列的前提下得到原序列的有序版拷贝
image.png
zip函数
zip()&字典解析
zip([iterable,…])
参数为多个可迭代对象,返回值为以元组为元素的列表,第i个元组的元素为参数中每个可迭代对象的第i个元素
可用来创建字典:
reversed函数
从后向前迭代一个序列
image.png
例1
现在有一个如下列表
In [161]: all_data = [['John', 'Emily', 'Michael', 'Mary', 'Steven'],
.....: ['Maria', 'Juan', 'Javier', 'Natalia', 'Pilar']]
要求取出所有名字中由两个e的名字
In [128]: result=[name for names in all_data for name in names if name.count('e')>=2]
In [131]: result
Out[131]: ['Steven']
例2
有如下的用户输入数据
In [171]: states = [' Alabama ', 'Georgia!', 'Georgia', 'georgia', 'FlOrIda',
.....: 'south carolina##', 'West virginia?']
现在要对这些数据进行清洗(使之成为正确的人名)
当我们需要对一组数据执行多个操作时,可以将多个操作放入一个列表中
In [152]: result=[]
In [153]: for x in states:
...: for fun in clean_ops:
...: x=fun(x)
...: result.append(x)
...:
In [154]: result
Out[154]:
['Alabama',
'Georgia',
'Georgia',
'georgia',
'FlOrIda',
'south carolina',
'West virginia']
例3
假设有一组字符串
In [177]: strings = ['foo', 'card', 'bar', 'aaaa', 'abab']
你想要根据各字符串不同字母的数量对其进行排序
strings.sort(key=lambda x: len(x))
ut[175]: ['bar', 'foo', 'aaaa', 'abab', 'card']
涉及到序列的排序方法sort()的高级语法 修改sort()的key参数(sorted方法同理)
柯里化:部分参数应用
即对现有函数的调用,同时只保留现有函数的部分参数(另一部分参数固定)
In [176]: def sum(x,y):
...: return x+y
...:
...:
In [177]: curry=lambda y:sum(5,y)
In [178]: curry(5)
Out[178]: 10
itertools模块
标准库itertools模块中有一组用于许多常见数据算法的生成器
例如:groupby可以接受任何序列和一个函数。它根据函数的返回值对序列中的连续元素进行分组。下面是一个例子
In [216]: strings
Out[216]: ['bar', 'foo', 'aaaa', 'abab', 'card']
In [217]: for letter,names in groupby(strings,lambda x : x[0]):
...: print(letter,tuple(names))
...:
...:
b ('bar',)
f ('foo',)
a ('aaaa', 'abab')
c ('card',)
image.png
网友评论