最近学的太乱了,必须整理一下知识点
1. 导入 pandas 和 numpy
import pandas as pd
import numpy as np
2.pandas 里面有两种数据结构 第一种 Series,第二种 DataFrame,学过pandas的小伙伴都知道DataFrame 是由多个Series组成的,接下来让我们揭开它们的面纱。
创建Series对象
s = pd.Series([1,3,5,np.nan,6,8])
创建Series到时候里面给的参数是一个数组,可以通过numpy来生成,也可以自己写,记得加中括号。不指定索引的话,它会默认生成整数索引。
创建DataFrame对象
生成dataframe对象有两种方式
1.给定数据和索引
先通过numpy生成多维数组数据,np.arange()可以生成一维数组,通过reshape()方法可以将一维数组构造成多维,例如第一个例子就构造成了3行5列的二维数组,而np.random.randn()可以直接随机构造多维数组,random表示随机,randn表示构造数组类型,传入几个参数就是几维,传入(4,4)即构造成四行四列的二维数组。
现在数据通过上面的方法有了,想要创建DataFrame,我们给它指定索引(index),不适用默认的,我的理解就是索引就是行的名称,还要给定列名(columns),这样就构造出一个DataFrame
代码:
# 生成6个时间作为我们的索引
dates = pd.date_range('20130101', periods=6)
# 通过random.randn生成6行4列二维数组,index指定为上面创建的dates,columns取名ABCD
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
2.用字典创建DataFrame
字典的键就是我们的列名,字典的值就是我们的数据,它会自动填充数据,它可以是多种数据类型。
代码
df2 = pd.DataFrame({'A': 1.,
'B': pd.Timestamp('20130102'),
'C': pd.Series(1, index=list(range(4)), dtype='float32'),
'D': np.array([3] * 4, dtype='int32'),
'E': pd.Categorical(["test", "train", "test", "train"]),
'F': 'stick to'})
# 没有指定index会默认按数字来给index
查看DataFrame属性
1.用 info()函数查看数据类型和数据多少条
2.用head()查看数据前5条,默认为前5条,相反用 tail()查看后几条。
3.用 describe()可以查看数据的统计摘要,包含了平均值,最小值,最大值,标准差(std)等等。
4.用 index()和columns()分别查看索引和列名
5.用 .T 可以实现数据行列转换 行转列,列转行
6.对索引排序用 sort_index函数, 这里axis设置可以有 0,1 ,设置为0表示对行排序,设置为1表示对列排序,还有一个ascending参数,默认是升序
这里设置ascending为False表示按降序排序,原本是ABCD,现在是DCBA
7.对值排序用 sort_values,设置 by参数按照什么排序,这里按照列B升序排序。
选取数据
要从DataFram中选取数据可以用 [ ]选取 也可以用点(.)的方法
用 [ ] 切片行:
选取0,1,2行的数据
选取0,1,2列的数据就要用到 iloc
第一个冒号表示选取所有行,第二个表示对列分割选取0,1,2列
筛选出前三行前三列数据
还有一种用 loc 的方法,那是按标签来分割,感兴趣的小伙伴可以自己去看看
布尔索引
用单列的值来选择数据
先从A列筛选出大于0的,然后再表现出来
用 isin()来筛选
只会把df里面为True的筛选出来
缺失值
df = pd.DataFrame({
'今天':['不开心','难受','香菇','很烦'],
'你':['健康','开心',np.nan,'有钱'],
'学习了吗':['学了','没有','摆烂','不想学']
})
缺失值用np.nan来表示
删除缺失值 用 dropna() 有一个默认参数any,意思是只要有空数据就删除,还可以设置为all,表示只有这一行全是空值才删除,不知道你们有没有发现为什么是删除行,因为默认axis=0,如要删除列要设置axis=1才行。
但是这样删除的数据并不会保存,再次查看df发现空值并没有被删掉,这要加上另一个参数inplace
设置inplace=True,删除的才会生效。
填充缺失值 fllna
Apply函数
apply函数它允许我们对DataFrame的每一行或者每一列分别应用一个自定义的函数,然后将结果合并成一个新的DataFrame对象。
np.cumsum 是对数组元素进行累加并存储结果。
这里要注意:axis默认是0,按照上面说法axis=0表示行,axis=1表示列,这里为什么对列进行了操作?这里可以理解为对行聚合,聚合的对象是列的数据。
apply函数还可以传入一个自定义函数 ,也就是lambda匿名函数或者自定义一个函数。
这里apply处理的都是Series对象
介绍一下分类统计方法 value_counts()
np.random.randint()方法生成随机整数,前两个参数给定范围,后一个给定生成个数
value_counts()统计值出现的个数。
字符串方法
Series 的 str 属性包含一组字符串处理功能,如下列代码所示。注意,str
的模式匹配默认使用正则表达式。
对字符串处理时要先调用str
合并(merge)
结合(concat)
Pandas 提供了多种将 Series、DataFrame 对象组合在一起的功能,用索引与关联代数功能的多种设置逻辑可执行连接(join)与合并(merge)操作。
merge()函数类似于MySQL的join函数,取交集
它还有很多参数,如下
分组
“group by” 指的是涵盖下列一项或多项步骤的处理流程:
- 分割:按条件把数据分割成多组;
- 应用:为每组单独应用函数;
- 组合:将处理结果组合成一个数据结构。
创建一个DataFrame对象df
按照序列A分组再求和
按照多列分组再求和
堆叠
stack()和unstack()方法
stack()将DataFrame列压缩至一层
压缩后的 DataFrame 或 Series 具有多层索引, stack() 的逆操作是 unstack(),默认为拆叠最后一层
pivot_table
函数基本语法:
pd.pivot_table(data,
values=None,
index=None,
columns=None,
aggfunc='mean',
fill_value=None,
margins=False,
dropna=True,
margins_name='All')
参数如下:
data:需要进行数据透视的DataFrame。
values:用于聚合的列名,默认聚合所有数值列。
index:数据透视表的index,从原数据的列中筛选。
columns:数据透视表的columns,从原数据的列中筛选。
aggfunc:用于聚合的函数,默认为’mean’,支持numpy的聚合函数。
fill_value:用于替换结果中的缺失值。
margins:添加行/列小计和总计,默认为False。
dropna:是否删除所有条目均为NA的列,默认为True。
margins_name:总计列的名称,默认为’All’。
总结
将时间转换为日期类型储存用 pd.to_datetime()函数
删除重复值用drop_duplicates()函数,查看重复值用duplicated()函数
删除重复值
apply函数:作用于DataFram数据中的一行或者一列数据的每个元素(注意apply默认axis=0是对列的数据进行处理,axis=1是对行的数据进行处理)
applymap:作用于DataFrame数据中每一个元素
map:本身是一个Series,作用于Series中每一个元素
更新索引 reset_index( drop=True,inplace=True) ,drop=True 表示把原来的索引给删掉。
唉,感觉还有好多要学,有点烦。。。。。