pandas笔记

1.计算数组a中各个元素出现的次数
from collections import Counter
count_list=Counter(a)
#获取出现次数为前10的元素
count_list.most_common(10)
2.安装pandas

下载适合你python版本的 .whl 文件:https://www.lfd.uci.edu/~gohlke/pythonlibs/

pandas笔记_第1张图片

然后 pip install 包的名字.whl

3.pandas的函数

①read_table() 读取数据,并整理成DataFrame类型的表格

import pandas as pd
unames = ['user_id','gender','age','occupation','zip']
users = pd.read_table('users.dat',sep='::',header=None,names=unames)

sep字段:指定分割符
names字段:指定表格的表头
其中users.dat (UserID::Gender::Age::Occupation::Zip-code)

②merge() 根据列名连接表格

data=pd.merge(pd.merge(ratings,users),movies)

其中
users.dat (UserID::Gender::Age::Occupation::Zip-code)
movies.dat (MovieID::Title::Genres)
ratings.dat (UserID::MovieID::Rating::Timestamp)

③pivot_table() 聚合

mean_ratings_by_gender = data.pivot_table(values='rating',index='title',columns='gender', aggfunc='mean')
pandas笔记_第2张图片

④groupby() 分组

ratings_by_title = data.groupby('title').size()
active_titles = ratings_by_title.index[ratings_by_title>=250]
#取评分数据大于250条的电影名称

根据title进行分组,利用size()获得一个含有每个分组的大小的Series对象
可能遇见报错见:http://blog.csdn.net/xiangweinn/article/details/78675369

⑤sort_index() /sort_values() 根据某列排序

mean_ratings_by_gender.sort_index(by='F',ascending=False)
mean_ratings_by_gender.sort_values(by='diff',ascending=True).head()

根据 F / diff 列 降序/升序 排序

⑥std() 计算标准差

#每个电影的得分标准差
rating_std_by_title = data.groupby('title')['rating'].std()
#根据标准差降序排列
rating_std_by_title.order(ascending=False)[:10]
4.pandas的数据结构

pandas有两个主要的数据结构:Series 和 DataFrame

①Series类似于一维数组,有值有索引
pandas笔记_第3张图片


Numpy运算
obj2[obj2 > 0] 筛选obj2中大于0的值
obj2 *2 数值乘2
np.exp(obj2) 计算e指数

数据对齐功能,如果传入的所以在数据中找不到,就会填充NaN值
pandas笔记_第4张图片

Series对象本身及其索引都有一个name属性,索引可以通过以下方式修改:
pandas笔记_第5张图片

②DataFrame是一个表格型的数据结构,每列可以是不同数据类型,既有行索引又有列索引。
构建DataFrame
pandas笔记_第6张图片

通过字典标记的方式或者属性的方式,可以将DataFrame的列获取为一个Series:
pandas笔记_第7张图片
获取第三行:

使用Series为DataFrame精确赋值:
pandas笔记_第8张图片

为不存在的列赋值将会新建一列,del关键字删除列,对于嵌套字典,外层字典的键作为列,内层键则作为行索引。
pandas笔记_第9张图片

③索引对象
Index 对象是不可修改的,功能类似一个固定大小的集合
pandas笔记_第10张图片

Index的方法和属性
方法 属性
append 连接另一个Index对象,产生一个新的Index
diff 计算差集,得到一个新的Index
intersection 计算交集
union 计算并集
isin 计算一个指示各值是否都包含在参数集合中的布尔型数组
delete 删除索引i处的元素,并得到新的Index
drop 删除传入的值,并得到新的Index
insert 将元素插入到索引i处,并得到新的Index
is_monotonic 当各元素均大于等于前一个元素时,返回True
is_unique 当Index没有重复值时,返回True
unique 计算Index中唯一值的数组
5.基本功能

①重新索引 reindex()


pandas笔记_第11张图片

reindex()的method选项


pandas笔记_第12张图片

ffill/pad: 前向填充(或搬运)值
bfill/backfill:后向填充(或搬运)值


pandas笔记_第13张图片
注意到:只有当为frame重新索引(index不能为空)时,填充才生效!

②丢弃指定轴上的项 drop()


pandas笔记_第14张图片

对于DataFrame,可以删除任意轴上的索引值:


pandas笔记_第15张图片

③索引、选取和过滤
Series索引的工作方式类似Numpy数组的索引,只不过series的索引值不只是整数。且标签切片是包含末端的!


pandas笔记_第16张图片

在DataFrame的行上进行标签索引 ix[]


pandas笔记_第17张图片

④算数运算和数据对齐
Series\DataFrame对象相加时,没有重叠的位置就会产生NA值,解决方法:
df1.add(df2,fill_value=0)
df1.reindex(columns=df2.columns,fill_value=0)
另外有:减法sub()、除法div()、乘法mul()

⑤DataFrame和Series之间的运算


pandas笔记_第18张图片

最后的方法是匹配行且在列上广播!

⑥函数应用和映射


pandas笔记_第19张图片

⑦排序
obj.sort_index() 根据Series的索引排序
frame.sort_index()根据行名排序
frame.sort_index(axis=1)根据列名排序
obj.order() 根据值排序
frame.sort_index(by='b')根据b列中的值排序
frame.sort_index(by=['a','b'])根据a列和b列中的值排序

没太看懂的rank()方法 *


pandas笔记_第20张图片

补充:轴标签(索引值)可以重复,例如obj=Series(range(5),index=['a','a','b','b','c'])

6.汇总和计算

①描述和汇总统计

方法 说明
count 非NA 值的个数
describe 针对Series或各DataFrame列计算汇总统计
min\max 计算最小值、最大值
argmin\argmax 计算最小值、最大值的索引位置(整数)
idxmin\idxmax 计算最小值、最大值的索引值(标签)
quantile 计算样本的分位数(0到1)
sum 值的总和
mean 值的平均值
median 值的算数中位数(0.5)
mad 根据平均值计算平均绝对离差
var 样本值的方差
std 样本值的标准差
skew 样本值的偏度(三阶矩)
kurt 样本值的峰度(四阶矩)
cumsum 样本值的累计和,把上一行累计到下一行,依次类推
cummin\cummax 累计最小值和最大值,第n行的值是前n行该列的最值
cumprod 样本值的累计积
diff 计算一阶差分(对时间序列很有用)
pct_change 计算百分数变化

对于Series对象obj,obj.sum()返回一个数值结果。
对于DataFrame对象df,df.sum()返回一个Series,每个值是某一列(纵向)的和;而df.sum(axis=1)返回的Series,每个值是某一行的和。
同理,对于mean()方法等,默认的都是纵向计算,计算列!


pandas笔记_第21张图片

②唯一值、值计数


pandas笔记_第22张图片
7.处理缺失数据

①过滤缺失数据


pandas笔记_第23张图片

对于DataFrame对象,dropna()默认丢弃任何含有缺失值的行,传入how='all'将只丢弃全为NA的那些行。


pandas笔记_第24张图片

②填充确实数据fillna()


pandas笔记_第25张图片

fillna()函数的参数

参数 说明
value 用于填充缺失值的标量值或字典对象
method 填充方式,如ffill\bfill
limit 前向和后向填充的的最大数量,和method配合使用
axis 待填充的轴
inplace 修改调用者对象而不产生副本,如上图
8.层次化索引

①定义
层次化索引使你在一个轴上拥有多个索引级别


pandas笔记_第26张图片

多层索引的Series对象可以移植到一个DataFrame对象上


pandas笔记_第27张图片

②重排分级顺序swaplevel()
重新调整某条轴上各级别的顺序,或根据指定级别上的值对数据进行排序

pandas笔记_第28张图片

③根据级别做汇总统计:level字段


pandas笔记_第29张图片

④使用DataFrame的列
将DataFrame的一个或多个列当作行索引来用,或者希望将行索引变成DataFrame的列,怎么实现呢?


pandas笔记_第30张图片

你可能感兴趣的:(pandas笔记)