Professional Documents
Culture Documents
python复习
python复习
目录
1. Python 基本语法与数据类型....................................................................................................4
1.1. 基本数据运算操作.........................................................................................................4
1.2. 基本数据类型.................................................................................................................4
1.2.1. 整数、浮点型.....................................................................................................4
1.2.4. 列表(list).........................................................................................................4
1.2.5. 元组(tuple)——不可变的列表(有着和列表类似的操作).......................5
1.2.6. range 类型..........................................................................................................6
1.2.7. 集合(set)...........................................................................................................6
1.2.8. 字典(dictionary)——类似 DataFrame..........................................................7
1.3. 条件语句(注意缩进!).............................................................................................7
1.3.1. for 循环(使用的循环定义域变量很广)......................................................7
1.3.2. while 循环..........................................................................................................8
1.3.3. countinue 与 break 与 else..............................................................................8
1.3.4. 列表推导式.........................................................................................................8
1.3.5. if.........................................................................................................................8
1.3.6. 逻辑表达式.........................................................................................................8
1.4. 函数................................................................................................................................ 9
1.4.1. def.......................................................................................................................9
1.4.2. 函数的参数.........................................................................................................9
1.4.3. 函数的参数传递.................................................................................................9
1.4.4. 匿名函数(简洁地定义一个简单的函数)...................................................10
1.5. 类..................................................................................................................................10
1.5.1. 定义...................................................................................................................10
1.5.2. 类的属性...........................................................................................................11
1.5.3. 类的继承...........................................................................................................12
1.5.4. 类的多态...........................................................................................................13
1.6. 命名空间与作用域.......................................................................................................13
2. Python 的文本处理语言..........................................................................................................14
2.1. 文件路径.......................................................................................................................14
2.1.1. 工作目录...........................................................................................................14
2.1.2. 绝对路径与相对路径.......................................................................................14
2.1.3. 路径有效性.......................................................................................................15
2.2. 文件读写.......................................................................................................................15
2.2.1. 用 open()返回对象进行读写..........................................................................15
2.2.2. 用 with open() as 进行读写........................................................................15
2.2.3. 文件的写作模式...............................................................................................16
2.3. import json——存储(dump)与读取(load).............................................................16
2.4. import pickle——二进制格式(可以保存函数与类的实例).............................16
2.5. import shelve——像字典一样保存.........................................................................17
2.6. 组织文件(import shutil, os).............................................................................17
2.6.1. 复制与移动.......................................................................................................17
2.7. 文件操作.......................................................................................................................17
2.7.1. 删除操作...........................................................................................................17
2.7.2. 遍历目录树.......................................................................................................18
3. Numpy........................................................................................................................................18
3.1. numpy.array.................................................................................................................18
3.1.1. array 的创建....................................................................................................18
3.1.2. 基本函数...........................................................................................................19
3.1.3. 切片...................................................................................................................19
3.1.4. 多维数组...........................................................................................................20
3.1.5. 布尔索引——返回拷贝...................................................................................20
3.1.6. 神奇索引--返回拷贝.......................................................................................21
3.1.7. array 的转置、换轴、合并与拆分................................................................21
3.2. np 函数..........................................................................................................................22
3.2.1. 通用函数...........................................................................................................22
3.2.2. 数学统计方法...................................................................................................22
3.3. 矩阵运算.......................................................................................................................23
3.4. 广播..............................................................................................................................23
4. Pandas......................................................................................................................................23
4.1. Series——带标签的一维数组,可以使用 np 函数,有字典的类似性质................23
4.1.1. Series 的创建(注意大写!)..........................................................................23
4.1.2. Series 的信息..................................................................................................23
4.1.3. 标签索引...........................................................................................................24
4.1.4. 逻辑判断与加法...............................................................................................24
4.1.5. 使用 np 函数.....................................................................................................24
4.1.6. name...................................................................................................................24
4.2. DataFrame.....................................................................................................................24
4.2.1. Dataframe 的创建............................................................................................24
4.2.2. 常用处理...........................................................................................................25
4.2.3. 标签...................................................................................................................25
4.2.4. name...................................................................................................................25
4.2.5. 索引...................................................................................................................26
4.2.6. 删除条目...........................................................................................................26
4.2.7. 使用索引筛选...................................................................................................26
4.2.8. loc 与 iloc.......................................................................................................27
4.2.9. Series 与 DataFrame 的运算...........................................................................28
4.2.10. 映射函数(用 np 函数就行).......................................................................28
4.2.11. Series 的排序................................................................................................28
4.2.12. 重复索引.........................................................................................................29
4.2.13. 统计.................................................................................................................29
5. 用 pandas 处理数据.................................................................................................................30
5.1. 数据储存与读取...........................................................................................................30
5.2. 保存数据.......................................................................................................................31
5.2.1. csv 格式............................................................................................................31
5.2.2. 二进制格式.......................................................................................................31
5.2.3. HDF5 格式..........................................................................................................31
5.2.4. Excel 格式........................................................................................................31
5.3. 处理缺失值...................................................................................................................32
5.3.1. 缺失的判断.......................................................................................................32
5.3.2. 缺失的处理.......................................................................................................32
5.4. 处理重复值...................................................................................................................32
5.4.1. 重复值的判断...................................................................................................32
5.4.2. 重复值的删除...................................................................................................32
5.5. 函数映射 (df.map).................................................................................................32
5.6. 替代值..........................................................................................................................33
5.6.1. df.replace...........................................................................................................33
5.6.2. 重命名轴索引 df.rename...............................................................................33
5.7. 离散化 pd.cut(A,B)...................................................................................................33
5.8. 处理异常值...................................................................................................................34
5.9. 置换与随机抽样...........................................................................................................34
5.10. 分层索引(多层索引,分为 leves 与 codes).......................................................34
5.11. 用列索引.....................................................................................................................35
5.12. 组合、合并.................................................................................................................35
5.12.1. pd.merge(df1.df2) 其中第一列为 key,第二列为不同的 data1、data2
........................................................................................................................................35
5.12.2. 根据索引合并.................................................................................................36
5.12.3. 沿着轴向连接.................................................................................................36
5.13.1. df.groupby.....................................................................................................37
5.13.2. groupby 的迭代..............................................................................................38
5.13.4. 用函数进行分组(根据函数返回的值分组).............................................39
6. 绘图..........................................................................................................................................39
6.1. import matplotlib.pyplot as plt (类似 matlab)..............................................39
6.2. import seaborn as sns (0.12.2 版本)..................................................................40
6.2.1. 绘图函数...........................................................................................................40
6.2.2. 绘制 subplot....................................................................................................41
6.2.3. 图片设置...........................................................................................................41
6.3. Pandas 绘图..................................................................................................................41
7. 统计模型..................................................................................................................................41
7.1. 线性回归模型...............................................................................................................41
7.2. K-means 聚类................................................................................................................42
7.3. PCA 降维........................................................................................................................42
7.4. 层次聚类.......................................................................................................................42
7.5. k 折交叉验证........................................................................................................................43
1. Python 基本语法与数据类型
1.1. 基本数据运算操作
1.1.1. 变量声明: 只能使用数字、字母与下划线不能用空格
1.1.2. 基本运算符号:
/ 除法 += 加法直接赋值
// 取整的除法(直 -= 减法直接赋值
接去除小数)
% 取余数 /= 除法直接赋值
** 次方 %= 取余直接赋值
@ 矩阵乘法 **= 幂次直接赋值
1.2. 基本数据类型
1.2.1. 整数、浮点型
1.1.1.1.字符串调整大小写
.title() *将字符串中每个单词的首字母大写,并将其余字符变为小写
.upper() *将字符串中的所有字符变为大写字母。
.lower() *将字符串中的所有字符变为小写字母。
1.1.1.2.字符串的的索引与切片
first_name + “ ” + last_name
* 字符串的连接使用 +
* 字符串可以使用索引 name[0] 如同 python 其他索引一样可以用-1 返回
最后一个元素
*可以使用索引切片 name[0:2] 效果如同 until
full_name[::2]
*数字为 slice step ,取 1 时返回整个字符串,取 2 时隔一个取一个
1.1.1.3.转义字符
\\ 输出反斜杠\ \n 表示换行
\' 输出单引号' \t 表示 Tap
\” 输出双引号”
1.2.4. 列表(list)
1.2.4.1.生成 list
mylist=['a',3,'string',4.5]
*可以包含不同类型的元素,用[]生成
*可以使用 python 索引,从零开始,-1 最后一个元素
len(list)
*返回列表长度(不能用 size)
python 索引机制
* 使用[] 从 0 开始正着数,从-1 开始取倒数
* [: 2] 从头开始取 2 个元素返回新的 list,0 的话返回一个空的 list
* a[:] 与 a[::]返回一整个 a
* [::2] 从头开始隔一个取一个,要大于 0
* list[[1,3,5]] python 的多重索引
1.2.4.2.修改列表元素
修改 直接使用索引
添加
mylist.append(val)
mylist.extend([4,5]) #可以在末尾插入一个 list
mylist.insert(1,val)
*注意前面的数字是插入后的索引,0 为第一个,1 为第二个
删除
del mylist[0] #直接利用索引
mylist.pop(0) #会返回删除的元素
mylist.remove('str') #会删除指定的元素
1.2.4.3.列表排序
list.reserve() #永久倒转列表
sorted(list) #临时排序
1.2.4.4.列表赋值
mylist[:]
mylist[::]
1.2.5. 元组(tuple)——不可变的列表(有着和列表类似的操作)
1.2.5.1.元组生成
mytuple = (100,'wo')
*可以使用不同的数据类型,可以使用 python 索引
*但是元组里的数据不可以改变,意味着无法在元组中添加、修改或删除元
素,但是可以通过重新赋值一个新的元组实现元组内容的修改
例如 :
test= (1,[2,3],5)
test[1].append(4) #返回(1,[2,3,4],5)
* 假如直接用逗号相连:
1,2,3
默认返回元组(1,2,3)
1.2.5.2.元组拆包
* 将一个元组里的元素都拿出来赋给另外的值,如果要取出某几个可以使
用元组的索引 a,b = t[:,2]之类的
a = 1,2,3
1.2.7.1.集合的创建
myset = {'a','b'}
a = set('abcdfr') #返回单个字母的集合
*重复元素只剩下一个
1.2.7.3.集合的函数(增加与删减)
a.add('e')
a.remove('e') #要是没有'e'会报错
1.2.7.4.frozenset
*frozenset 之中的元素不能增删
frozenset('abbaskc')
1.2.8.1.生成字典(key-values)与调用
d1= {'color': 'green', 'points': 5}
dict(one=1,two=2,three=3)
dict(zip(a,b))
d1['point']
1.2.8.2.字典内操作(索引与增删)
*增加: d1['new']=new_value
*删除:
del d1['new'] #整个删除了键值对
avals = a.values()
*返回的是视图对象,展示其动态特性,会实时改变
a_items = a.items
* 返回字典的所有键值对,是一个 dict_items 类型
dict_items([('two', 2), ('three', 3)]),也是视图,中间元素是元组
1.2.8.4.字典间的操作
a.update(b)
*将两个字典合并,实际上是在对 a 操作
1.3. 条件语句(注意缩进!)
1.3.1. for 循环(使用的循环定义域变量很广)
for i in range(10):
print(m_sum)
*注意缩进、in、冒号
*循环字典中的值(这其实就是元组拆包)
for key, value in user_0.items(): #items 返回键值对的元组
print("\nKey: " + key)
1.3.2. while 循环
while current_number <= 5:
print(current_number)
while a in mydict:
mydict.remove(a)
break
if current_number % 2 == 0:
continue
1.3.4. 列表推导式
1.3.5. if
if age < 4:
print("cost is $0.")
elif age < 18:
print(" cost is $5.")
else:
print(" cost is $10.")
1.3.6. 逻辑表达式
in 在某里面 and 且
not in 不在某里面 or 或
== 等于 != 不等于
> 大于 < 小于
>= 大于等于 <= 小于等于
not() 里面放条件语句,取反 all 需要全部为 True
的 bool(非)
any 只需要一个为 True
1.4. 函数
1.4.1. def
1.4.2. 函数的参数
*函数调用的时候传递的是对象的引用而不是对象的值
*位置实参与关键字实参(前者需要注意创建函数时参数的位置,后者使用
了关键字所以不必在意位置),实际上关键字实参传递了键值对
* 参数默认值:注意顺序,只能放在后面
def describe_pet(pet_name, animal_type='dog'):
1.4.3. 函数的参数传递
*不可变类型:如整数、字符串、元组
由于 a 不可变,如果在 fun(a)内部修改 a 的值,则是生成新的对象。
*可变类型:如列表,字典
由于 a 可变,修改后 fun 外部的 a 也会改变。
*传递任意数量的实参:(放后面)
使用 *tuple_name 传递任意数量的参数并将多出来了放到此元组里面
def make_pizza(*toppings):
#形参名*toppings 中的星号让 Python 创建一个名为 toppings 的空元组,并将收到的所
有值都封装到这个元组中。
*传递任意数量的关键词实参 (两个星号)(放后面)
def build_profile(first, last, **user_info):
#形参**user_info 中的两个星号让 Python 创建一个名为 user_info 的空字典,并将收到
的所有名称—值对都封装到这个字典中
fun()
1.4.4. 匿名函数(简洁地定义一个简单的函数)
fun = lambda x: x**2
#一个简单的平方函数 fun()
1.5. 类
1.5.1. 定义
class Car():
"""初始化描述汽车的属性"""
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_descriptive_name(self):
""""返回整洁的描述性信息"""
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
"""打印一条指出汽车里程的消息"""
print("This car has " + str(self.odometer_reading) + " miles on it.")
"""将里程表读数增加指定的量"""
self.odometer_reading += miles
1.5.2. 类的属性
1.5.2.1.类属性
"""一次模拟小狗的简单尝试"""
color='yellow'
#此处定义为类属性,区别于实例属性,所有实例共享类属性。
#类似 c++中的静态变量
def __init__(self, name, age):
*当共享属性为不可变类型:
*实例(例如有实例 x,y)直接调用共享属性会显示类属性,但是通过实例
可以定义一个实例自己的同名属性,del 之后仍然显示类属性;不过 del 两次
后此实例的这一属性就没有了(其他类与实例还会有)
x=Dog('Bob',16)
y=Dog('Tom',18)
x.color #yellow
y.color #yellow
print(x.color) #red
Dog.color #yellow
del x.color
print(x.color) #yellow
*当共享属性设置为列表之类的可变属性,实例的此属性改变会使得整个属
性改变
1.5.2.2.私有属性
*在属性的名字前面加__(两个下划线)可以使得属性变为私有变量,不能使
用原变量名访问
class Dog():
__count = 0
self.__count = 0
Dog.__count+=1
print(Dog.__count)
def sitcounts(self):
1.5.3. 类的继承
1.5.3.1.构造函数的继承
class ElectricCar(Car):
"""初始化父类的属性"""
super().__init__(make, model, year)
#用 super 调用父类的构造函数
*类在继承后不会自动调用父类的构造函数,除非子类中没有构造函数(即
定义了子类自己的构造函数就不会主动调用父类的构造函数)
*super().__init__( 传 入 的 参 数 ) 就可以 调用父 类的操作,不 需要重新写一 遍
self.xxx 相当于简化使用了,便于多态
1.5.3.2.方法的继承
*Python 的成员函数均为虚函数,这意味着重写子类的成员函数会直接本
来给子类的覆盖父类的函数(不会改变父类本身)
*isinstance 可以判断一个实例 a 是否是 B 类中的;issubclass 可以判断
一个类 A 是否继承与另一个类 B
ininstance(a,B) #若 a 是 B 的子类的实例返回 True
issubclass(A,B)
1.5.4. 类的多态
def sounds(all):
try:
all.sounds()
except AttributeError:
print('不会叫')
1.6. 命名空间与作用域
1. namespace ( 命 名 空 间 ) 是 一 个 从 名 字 到 对 象 的 映 射 , 大 部 分 命 名 空 间 都 由
Python 字典实现。
3. 不同命名空间中的名称之间没有关系,两个不同的模块都可以定义一个 maximize
函数而不会产生混淆
4. 程序在访问变量时,会在当前的命名空间内查找。
6. 命名空间保证了名称不冲突,而作用域给出了访问这些名称的区域
7. global 语句可被用来表明特定变量生存于全局作用域并且应当在其中被重新绑
定;nonlocal 语句表明特定变量生存于外层作用域中并且应当在其中被重新绑定。
内部的变量带到了函数外面
2. Python 的文本处理语言
2.1. 文件路径
导包:import os
2.1.1. 工作目录
*两个函数:
os.path.join('a','b','c') 将字符串用\\连接起来
os.path.splitext() 将文件路径名与文件名和扩展名(如.txt)分成两个字符串元组
2.1.2. 绝对路径与相对路径
* 绝对路径:'C:\\Users\\huggs\\Desktop\\file.txt'
* 相对路径:
'.\\file.txt''
'..\\Desktop\\file.txt''
* os.listdir('.') 查看当前目录下所有文件
* os.makedirs('\\tmp\\a\\b') 建立/tmp/a/b 目录,如果已经有了报错
2.1.3. 路径有效性
* os.path.exists('C:\\Windows') #路径是否存在
* os.path.isdir('C:\\Windows\\System32') #是否为文件夹
* os.path.isfile('C:\\Windows\\System32') #是否为文件
2.2. 文件读写
2.2.1. 用 open()返回对象进行读写
2. 用 read()读取文件内容(所有内容,返回字符串)
contents = file_object.read()
3.用.close()关闭文件
file_object.close()
contents = file_object.read()
#调用 File 对象的 read()方法
print(contents)
* 逐行读取:
filename = 'pi_digits.txt'
print(line) #默认输出一个回车
* open 的参数设置:
open(filename, 'w') #写入模式,直接覆盖原文件
* 用.write('string') 写入内容:
file_object.write("I love programming.\n") #要手动换行
* 用 w 和 a 模式若是没有文件会新建
2.3. import json——存储(dump)与读取(load)
import json
filename = 'numbers.json'
print(numbers1)
2.4. import pickle——二进制格式(可以保存函数与类的实例)
import pickle
filename = 'pet'
pickle.dump(mypet,f_obj)
newpet=pickle.load(f_obj)
shelfFile = shelve.open('mydata')
shelfFile['cats'] = cats
shelfFile.close()
* shelve 有 key-value:
* import random
random.shuffle(mylist) #随机打乱一个列表
2.6. 组织文件(import shutil, os)
2.6.1. 复制与移动
shutil.copy('pi_digits.txt', '.\\test\\test1.txt')
shutil.copytree('test', 'test1')
shutil.move('test\\test1.txt', 'test1\\test2.txt')
2.7. 文件操作
2.7.1. 删除操作
2.7.2. 遍历目录树
os.walk(dir)
3. Numpy
import numpy as np
3.1. numpy.array
3.1.1. array 的创建
* 使用列表创建
np.array([1,2,3],dtype=np.float64)
* 使用 ones,zeros,empty,full_like 生成相同元素
np.zeros(10)
np.zeros((3, 6))
np.arange(start,stop,step)
arr2=np.ones_like(arr1)
np.identity(5) #生成单位阵
np.random.randn(1,3) #生成[0][0:3]的标准正态随机数
np 生成随机数:
np.random.rand(n) 均匀分布随机数
np.random.randn(n) 标准正态随机数
np.random.randint(low,high,size) 指定范围内随机整数左闭右开
np.random.random(n) 均匀分布随机数
np.random.uniform(low,high,size)
np.random.(mu,std,size)
np.random.binomial(n,p,size)
np.random.seed(134) #设置随机种子
3.1.2. 基本函数
b[0]=1
3.1.4. 多维数组
*索引方式:(两种索引等同,都是先返回第一个大的,然后第一行,再行
里的元素)
arr3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
arr3d[0][1][1]
arr3d[0,1,1]
arr2d=np.array([[1,2,3],[4,5,6]])
3.1.5. 布尔索引——返回拷贝
* 逻辑运算符
~bool_index #真假反转
tt=data[names != 'Joe']
tt[1]=8
* 返回的是拷贝,data 不会变
3.1.6. 神奇索引--返回拷贝
*转置
arr = np.arange(15).reshape((3, 5))
arr.T
*换轴——返回视图(最简单的是行换列,即转置)
#对于三维,原来的(0,1,2)轴变为了(1,0,2)即第一个轴与第二个轴互换了,第三个轴
不变:([0,1]的位置变为了[1,0]的位置)
arr.transpose((1, 0, 2))
*合并
vstack:上下垂直合并
np.vstack((arr1, arr2))
hstack:左右水平合并
np.hstack((arr1, arr2))
*拆分
arr = np.random.randn(5, 2)
fist,second = np.split(arr,[1],axis=1)
*注意拆分的起始索引是要输入 list
*注意 axis = 1 是从列,axis=0 是从行
3.2. np 函数
3.2.1. 通用函数
np.sqrt(arr)
np.exp(arr)
np.log(arr)
np.sin(arr)
3.2.2. 数学统计方法
arr=np.random.randn(5, 3)
np.mean(arr) ; arr.mean()
np.mean(arr,axis=0) #对行作用求均值,最后返回一个行向量是每一列的均值
np.mean(arr,axis=1) #对列作用求均值,最后返回一个列向量是每一行的均值
arr.mean(0) #对每一列求均值(即对行的五个数作用了)
arr.mean(1) #对每一行求均值(即对列的三个数作用了)
arr.sum()
arr.std()
arr.max()
3.3. 矩阵运算
x.dot(y) ; x@y
numpy.linalg.inv(X)
np.random.shuffle(X) #打乱的是第一维即行
3.4. 广播
*较小的数组在较大的数组上面广播使得元素匹配(即 array 总是按照元素
处理)
4. Pandas
* 用列表
pd.Series([4,'7',[3,5]]) #默认标签 0 1 2
pd.Series([4,'7',[3,5]],index=['a','b','c'])
* 用字典
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
obj3 = pd.Series(sdata)
obj3
* 用列表和字典
states = ['California', 'Ohio', 'Oregon', 'Texas']
* 直接用标签
obj['a'] = 6
* 布尔索引
obj[obj>2]
* 神奇索引
obj[['c','a','d']]
4.1.4. 逻辑判断与加法
pd.notnull(obj4)#判断是否不为空值
4.1.5. 使用 np 函数
*可以使用 np 的函数:
np.exp(obj) #对 value 指数,如果有不是数字会报错
4.1.6. name
obj4.index.name = 'state'
4.2. DataFrame
二维数据结构,每一列是一个 Series(相同 index)
4.2.1. Dataframe 的创建
* 使用字典
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
df= pd.DataFrame(data)
index=['a','b','c'],
columns=['1','2','3'])
4.2.2. 常用处理
df.head()
df.T #将行列转置
df.columns
df.state #必须要存在才能索引
*用标签索引元素
df['state'][0]='cc' #列标签在前行标签在后,本质是 Series
* 删除一整列
del df['eastern']
*使用标签时的视图与拷贝
.columns_name 返回视图(但要是选择两列可能是 copy(又是可能根据内存
决定视图还是拷贝)),同理 df['col_name']也是视图
test=df2.state #这是视图 返回的 state 这一列
test=frame2.state.copy() #这是拷贝
test['one']='test2'
4.2.4. name
df.index.name='year'
df.columns.name = 'state'
4.2.5. 索引
4.2.5.1.索引对象
myindex = obj_series.index
* reindex 返回拥有新索引的新对象
obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e']) #obj 为 Seires
* 若新的索引数量多于原来的索引赋值为 NAN
* reindex 的 method 参数
obj3.reindex(range(6), method='ffill')
#ffill=向前填充(即后一个填充前一个的值(本来只有 0 2 4 有赋值))
obj3.reindex(range(6),method='bfill')
#bfill=向后填充(前一个填充后一个的值)
*改变列索引:
states = ['Texas', 'Utah', 'California']
df.reindex(columns=states)
4.2.6. 删除条目
df.drop('two', axis=1)
#作用到列上面,可以删除 df 的列
obj.drop('c', inplace=True)
4.2.7. 使用索引筛选
test=obj[2:4] #位置索引切片返回视图
* 对 df:(注意都是返回行)
b = df[:2] #默认提取前两行
data[data['three'] > 5]
data[data < 5] = 0
* 神奇索引返回新对象(df 可以对列索引而不能对行索引)
返回的是列
test=obj[['b', 'a', 'd']] #返回新对象
* Series 的整数索引
4.2.8. loc 与 iloc
*这两个函数均是返回视图!
* .loc 用索引调用
data.loc['Colorado', ['two', 'three']] #只有一行时返回 Series
* .iloc 用顺序调用
data.iloc[2, [3, 0, 1]] #只有一行时返回 Series
* .iloc 列索引范围必须有而.loc 可以没有,行索引可以用切片
data.iloc[:, :3][data.three > 5]
data.loc[:'Utah', 'two']
* .loc 可以使用布尔索引、函数等方法进行高级选取而.iloc 不行
* .loc 与.iloc 对于整数索引(按标签与按位置)
ser = pd.Series(np.arange(3.))
df1.rdiv(1) #返回倒数
df1.div(2)#每个元素除以 2
df1.reindex(columns=df2.columns, fill_value=0)
#重建索引时,也可以指定填充值
np.abs(frame) #取绝对值
* .apply(fun) 逐列
f = lambda x: x.max() - x.min()#匿名函数
frame.apply(f,axis='columns') #每行会调用一次
* .applymap(fun) 逐元素
format = lambda x: '%.2f' % x #格式化的输出,按照小数点后两位输出
* index 排序;
参数:axis=’columns’ ascending=False (默认升序改为降序)
obj.sort_index() #返回新的排序好的对象,对 DataFrame 的话作用到.index
* value 排序
frame.sort_values(by='b') #by 后面加的列名,默认从小到大
参数:
method =’first’ #不取中位数,先到先得
ascending=False #排序改为从大到小
4.2.12. 重复索引
* Series 可以设置相同标签:
obj = pd.Series(range(5), index=['a', 'a', 'b', 'b', 'c'])
* 返回是否有重复标签:
obj.index.is_unique
* 定位标签时会返回所有等于(例如 a,返回两个)标签的值
4.2.13. 统计
df.sum(axis=1) #按照列相加
df.idxmax() #返回每行最大值的列索引
df.cumsum() #对列作用(每列一个一个加下来),求累加
df.describe()
obj = pd.Series(['c', 'a', 'd', 'a', 'a', 'b', 'b', 'c', 'c'])
obj.value_counts() #计算每个元素的次数
df[‘column_name’]value_counts() #可以统计比如说某各班级出现了多少次
5. 用 pandas 处理数据
5.1. 数据储存与读取
* 读取 csv 文件
df = pd.read_csv('examples\ex1.csv')
* 多重 index
parsed = pd.read_csv('examples/csv_mindex.csv',index_col=['key1', 'key2'])
#此时用元组做分层索引,index 为(‘one’,’a’)
* 读取 txt
5.2. 保存数据
5.2.1. csv 格式
df.to_csv('examples/out.csv')
frame.to_pickle('examples/frame_pickle')
pd.read_pickle('examples/frame_pickle')
5.2.3. HDF5 格式
store = pd.HDFStore('mydata.h5')
5.2.4. Excel 格式
xlsx = pd.ExcelFile('example)
pd.read_excel(xlsx, 'Sheet1')
df = pd.read_excel('file.xlsx')
#存储:
df.to_excel('data.xlsx', sheet_name=’Sheet2’,index=False)
5.3. 处理缺失值
5.3.1. 缺失的判断
5.3.2. 缺失的处理
* 读取数据时:
pd.read_csv('examples/survey_visited.csv', keep_default_na=False)
#是否将没有的数据设置为 NaN
* 读取数据后:
df.info() #统计每一个变量的类型
df.fillna(0) #填充缺失值
df.fillna(method='ffill') #向前填充缺失值(和前面那个值保持一致)
df.fillna(method='bfill') #向后填充,和后面的值保持一致
df.interpolate() # 插值,插两个间的均值
5.4. 处理重复值
5.4.1. 重复值的判断
df.duplicated() # 判断是不是行重复(行的每一个元素都要一样)
5.4.2. 重复值的删除
data.drop_duplicates() #删除完全相同的行只保留一个
data.drop_duplicates(['k1']) #列 k1 里的值只保留一个(先到先得)
data.drop_duplicates(['k1', 'k2'], keep='last') #重复的行保留后面一个
data['animal'] = lowercased.map(meat_to_animal)
#map 接受一个函数或者字典,用字典的映射生成一列
data['food'].map(lambda x: meat_to_animal[x.lower()])
5.6. 替代值
5.6.1. df.replace
data.rename(index=str.title, columns=str.upper)
* str 指的是原来的数据
* 可以使用 inplace 来进行替换原数据
data.rename(index={'OHIO': 'INDIANA'},
columns={'three': 'peekaboo'})
out:[(18, 25], (18, 25], (18, 25], (25, 35], (18, 25], ..., (25, 35], (60, 100], (35, 60], (35, 60], (25,
35]]
cats.codes #用序号代替区间进行返回
out:array([0, 0, 0, 1, 0, 0, 2, 1, 3, 2, 2, 1], dtype=int8)
5.8. 处理异常值
data[(np.abs(data) > 3).any(1)]
#这里是判断每行只要有一个绝对值大于三就返回 true
5.9. 置换与随机抽样
* np.random.permutation(n)对 0 到 n-1 的整数随机排序
sampler = np.random.permutation(5) #对 0 到 4 随机排序
df.take(sampler) #按照索引提取行
* df.sample(n) 无放回抽取 n 行
df.sample(n=10, replace=True)
frame.swaplevel(0, 1).sort_index(level=0)
* 按照层级汇总:
frame.sum(level='key2') #计算 key2 的 level 下各列的总和,返回 DF,是行与行相加
5.11. 用列索引
* 用 on 参数选定按照哪一列合并
pd.merge(df1, df2, on='key') #on:我按照哪一个列去合并
* suffixes 重命名在合并时冲突的列名加上的后缀并分开
5.12.2. 根据索引合并
'value': range(6)})
#等同于:
5.12.3. 沿着轴向连接
* s1,s2,s3 都是 Series:
result.unstack()
* 指定列分组:
* 指定多列分组:
* 一些函数:
group.mean()
* 对一个 lable 分组
* 用 Series 和字典这两种数据类型的对应关系可以将相同的结果(比如说
两个列对应 red)分为一组
5.13.4. 用函数进行分组(根据函数返回的值分组)
people.groupby(len).sum()
6. 绘图
plt.plot(ds_1['x'], ds_1['y'])
# 散点图:
* 绘子图:
fig = plt.figure()
axes1 = fig.add_subplot(2, 2, 1)
axes2 = fig.add_subplot(2, 2, 2)
axes3 = fig.add_subplot(2, 2, 3)
axes4 = fig.add_subplot(2, 2, 4)
* 直方图,散点图与箱线图
* sns.countplot(data, x, y,hue)
sns.countplot(x=df["class"])
* sns.barplot(data, x, y, hue)
hue = ‘cloumns_name’可以构造第二分组计数,一般直接输入一个 df 的列就可以计数
绘制条形图,默认计算均值
* sns.regplot(data, x, y)
默认绘制线性回归直线和置信区间
* sns.scatterplot(data, x, y, hue , size ,style)
hue 为分组不同颜色,size 会按照列名大小设置点的大小,style 会根据列名的值不同给予不
同形状
kind = ‘reg’#中间绘制回归直线
* sns.pairplot(data, hue)
绘制每一列的变量相关图(默认对角直方图其他上下角散点图)
修改绘制图的类型:
pair_grid = sns.PairGrid(tips_numeric)
pair_grid = pair_grid.map_upper(sns.regplot)
pair_grid = pair_grid.map_lower(sns.kdeplot)
plt.show()
* a = sns.PairGrid(data, hue)
a.map(sna.scatterplot)
* sns.lmplot(data, x, y, hue)
# 与 regplot 相比可以绘制多个子图(比如说 x 是离散变量)并用 hue 分组
6.2.2. 绘制 subplot
6.2.3. 图片设置
* 主题与样式
sns.set_style('whitegrid')
6.3. Pandas 绘图
* 直方图
fig, ax = plt.subplots()
plt.show()
ax = tips[['total_bill', 'tip']].plot.kde(ax=ax)
ax = tips.plot.box(ax=ax)
7. 统计模型
7.1. 线性回归模型
import statsmodels.formula.api as smf
model = smf.ols('tip ~ total_bill', data=tips)
results = model.fit()
results.summary()
* 中间是回归的变量,如果有交叉效应可以用 x1*x2
7.2. K-means 聚类
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3,random_state=42).fit(data.values)
kmeans_3 = pd.DataFrame(kmeans.labels_,columns=['cluster'])
# kmeans.labels_ 是预测结果
7.3. PCA 降维
from sklearn.decomposition import PCA
pca_trans = pca0.transform(data)
pca_trans_df = pd.DataFrame(pca_trans,columns=['pca1','pca2'])
kmeans_3 = pd.concat([kmeans_3,pca_trans_df],axis=1)
fig = sns.lmplot(x='pca1',
y='pca2',
data=kmeans_3,
hue='cluster',fit_reg=False)
7.4. 层次聚类
from scipy.cluster import hierarchy
wine_complete = hierarchy.complete(wine)
# complete 计算距离的方式
fig = plt.figure()
dn = hierarchy.dendrogram(wine_complete)
plt.show()
7.5. k 折交叉验证