数据分析之pandas学习

最近学的太乱了,必须整理一下知识点

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 表示把原来的索引给删掉。

唉,感觉还有好多要学,有点烦。。。。。

  • 20
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值