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/
然后 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')
④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
Numpy运算
obj2[obj2 > 0] 筛选obj2中大于0的值
obj2 *2 数值乘2
np.exp(obj2) 计算e指数
Series对象本身及其索引都有一个name属性,索引可以通过以下方式修改:
②DataFrame是一个表格型的数据结构,每列可以是不同数据类型,既有行索引又有列索引。
构建DataFrame
通过字典标记的方式或者属性的方式,可以将DataFrame的列获取为一个Series:
使用Series为DataFrame精确赋值:
为不存在的列赋值将会新建一列,del关键字删除列,对于嵌套字典,外层字典的键作为列,内层键则作为行索引。
③索引对象
Index 对象是不可修改的,功能类似一个固定大小的集合
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()
reindex()的method选项
ffill/pad: 前向填充(或搬运)值
bfill/backfill:后向填充(或搬运)值
②丢弃指定轴上的项 drop()
对于DataFrame,可以删除任意轴上的索引值:
③索引、选取和过滤
Series索引的工作方式类似Numpy数组的索引,只不过series的索引值不只是整数。且标签切片是包含末端的!
在DataFrame的行上进行标签索引 ix[]
④算数运算和数据对齐
Series\DataFrame对象相加时,没有重叠的位置就会产生NA值,解决方法:
df1.add(df2,fill_value=0)
df1.reindex(columns=df2.columns,fill_value=0)
另外有:减法sub()、除法div()、乘法mul()
⑤DataFrame和Series之间的运算
最后的方法是匹配行且在列上广播!
⑥函数应用和映射
⑦排序
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()方法 *
补充:轴标签(索引值)可以重复,例如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()方法等,默认的都是纵向计算,计算列!
②唯一值、值计数
7.处理缺失数据
①过滤缺失数据
对于DataFrame对象,dropna()默认丢弃任何含有缺失值的行,传入how='all'将只丢弃全为NA的那些行。
②填充确实数据fillna()
fillna()函数的参数
参数 | 说明 |
---|---|
value | 用于填充缺失值的标量值或字典对象 |
method | 填充方式,如ffill\bfill |
limit | 前向和后向填充的的最大数量,和method配合使用 |
axis | 待填充的轴 |
inplace | 修改调用者对象而不产生副本,如上图 |
8.层次化索引
①定义
层次化索引使你在一个轴上拥有多个索引级别
多层索引的Series对象可以移植到一个DataFrame对象上
②重排分级顺序swaplevel()
重新调整某条轴上各级别的顺序,或根据指定级别上的值对数据进行排序
③根据级别做汇总统计:level字段
④使用DataFrame的列
将DataFrame的一个或多个列当作行索引来用,或者希望将行索引变成DataFrame的列,怎么实现呢?