数据分析 day04(二)

pandas

pandas是数据分析的核心框架,集成了数据结构化和数据清洗以及数据分析的一些方法。pandas在numpy的基础上新增了3个数据结构,Series、DataFrame、Pannel

2. DataFrame

一个DataFrame由以下三部分构成:
行索引:index
列索引:columns
值:values

模块导入

from pandas import DataFrame
2.1 DataFrame的创建

最常用的方法是传递一个字典来创建。DataFrame以字典的键作为每一列的列名,以字典的值(一维数组)作为每一列

  1. 用字典创建一个DataFrame,字典中的一个键值对就是一个列,键是列名,值是列上的值
    如果用字典创建时不加cloumns这个属性,创建出来的列是没有 “姓名”,“语文”,“数学”,“外语”,“综合” 这样的顺序的,随机排列,因为字典是无序的

在这里插入图片描述

属性:shape、size、index、columns和values
在这里插入图片描述

  1. 用数组来创建
    在这里插入图片描述
2.2 DataFrame的索引
2.2.1 对列进行索引

在这里插入图片描述

  1. 索引列时候用键值的方式,DataFrame的键是列名
    在这里插入图片描述
  1. 用属性的方式来索引,DataFrame的列名也称为属性
    在这里插入图片描述
  1. 如果列索引用列表来表示,那么返回出来是一个DataFrame
    如果用一个键(属性)来表示返回出来的是一个Series
    在这里插入图片描述

扩展:

  1. 列索引能不能切片?
    在这里插入图片描述
    列索引不能直接切片,切出来是一个空列表
  2. 列索引能不能隐式?
    在这里插入图片描述
    直接报红,列索引只有显式,没有隐式
  3. 列索引能不能重复?
    df1在这里插入图片描述
    把C变成B
    在这里插入图片描述
    所以 列索引可以重复
2.2.2 对行进行索引

行索引分为隐式索引和显式索引两种
在这里插入图片描述
1. 显式索引 .loc[ ]
根据index来索引

  1. 索引单行
    在这里插入图片描述
  2. 索引多行
    在这里插入图片描述
  3. 连续索引多行

在这里插入图片描述

2. 隐式索引 .iloc[ ]
根据index对应的下标来索引

  1. 单行索引
    索引下标值为0的信息
    在这里插入图片描述
  2. 多行索引
    在这里插入图片描述
  3. 连续索引多行
    为什么这里只有1行呢?因为区间是前闭后开的,所以只取到下标值为2的信息
    在这里插入图片描述

3.索引具体某些元素
在这里插入图片描述

方法一、分层索引,首先索引行或者列得到一个Series,再从Series中继续查找
在这里插入图片描述

方法二、直接定位,按照目标的行标与列标直接定位到具体元素
直接定位不能先列后行,因为数组查找的时候只能先行后列,否则会报错
比如 : 数学是列,b是行
在这里插入图片描述
正确的方式,先行后列
在这里插入图片描述

多层切片

只想要索引为a的数学和综合的成绩
在这里插入图片描述

前面说了列索引不能直接切片,但是,根据多层切片,列索引可以间接切片

比如,索引 数学 外语 综合 的成绩
在这里插入图片描述

2.3 DataFrame的运算

首先创建两个DataFrame对象
在这里插入图片描述

2.3.1 DataFrame之间的运算

和Series一样遵从自动补齐机制

df1+df2 只有在两个DataFrame对象里都有的元素(交集)才会显示,且元素会相加比如java 58=44+14
其余没有交集的都用NaN补齐
在这里插入图片描述

如果不想补NaN,想让其显示,可以使用函数的方式
这样依旧是df1+df2,但为什么还是有NaN呢?因为这些就是在df1和df2中都不存在的元素,
比如,df1中的d这一行,没有数学这个属性,而df2中没有d这一行
这里fill_value=0的方式,表示以0去补,为什么NaN不是变成0?仔细观察一下,那是df1中或者df2中的存在的元素
在这里插入图片描述
换种方式更好理解,将fill_value=0改为fill_value=1,看一下变化
本来 a这一行的 ruby=3的变为了ruby=4
这个ruby=3是df1中a行的元素,而df2中没有ruby这个属性,然后fill_value=0将df2中凭空弄出一个0去和df1中的a行的ruby=3相加
所以fill_value=0的作用不是将NaN变成一个数,而是将其中一个对象中不存在的对象指定为0,去和另一个对象中存在的元素去相加

在这里插入图片描述

除了加运算,还有其他的一些运算
运算符和对应的函数:
+ add()
- sub(),subtract()
x mul(),multiply()
/ div(),divide()
// floordiv()
% mod()
** power()

2.3.2 Series与DataFrame之间的运算

在这里插入图片描述

  1. 取到一行的值
    取a这一行,得到的是一个Series,index部分是df1的列标,values部分是这一列的值
    在这里插入图片描述
  1. 取到一列的值
    取python这一列,得到的是一个Series,index部分是df1的行标,values部分是这一行的值
    在这里插入图片描述

3)Series和DataFrame相加减的时候,默认将Series加到DataFrame的每一个行上,即DataFrame对应的列上的元素每个都加上Series对应列的值
将df1和a这一行的数据s_row相加
在这里插入图片描述
在这里插入图片描述

  1. 当把Series加到行上的时候如果index不对应就会启动自动补全机制
    在这里插入图片描述
  1. 用函数来表示运算符
    当我们用函数来表示运算符的时候,可以用axis表示加的方向
    axis默认=1,此时会把Series加到DataFrame的每一个行上
    axis=0的时候,此时会把Series加到DataFrame的每一个列上

当axis=1,
此时会把Series加到DataFrame的每一个行上,即a,b,c,d四行都加了Series [44 67 51 3]这些值
在这里插入图片描述
df1.add(s_row,axis=1)就相当于df1+s_row
在这里插入图片描述

当axis=0,
在这里插入图片描述
此时会把Series加到DataFrame的每一个列上

在这里插入图片描述

练习6:
假设ddd是期中考试成绩,ddd2是期末考试成绩,请自由创建ddd2,并将其与ddd相加,求期中期末平均值。
假设张三期中考试数学被发现作弊,要记为0分,如何实现?
李四因为举报张三作弊立功,期中考试所有科目加100分,如何实现?
后来老师发现有一道题出错了,为了安抚学生情绪,给每位学生每个科目都加10分,如何实现?

期中考试
在这里插入图片描述
期末考试
在这里插入图片描述
期中期末平均值
在这里插入图片描述
作弊记为0分
在这里插入图片描述
李四所有科目加100分
在这里插入图片描述
给每位学生每个科目都加10分
在这里插入图片描述

2.4 数据缺失的处理
2.4.1 在pandas中None和np.nan都看做是np.nan (NaN)

在这里插入图片描述
pandas中默认就有有nan-safe操作,在进行聚合运算的时候,遇到nan会直接忽略,也就是说NaN不参与运算
例如上面的计算就只计算显示出来的数的和
在这里插入图片描述

2.4.2 DataFrame中对缺失数据的处理

在这里插入图片描述

查看缺失:isnull,notnull
isnull 缺失显示 True
在这里插入图片描述

notnull 不缺失显示True
在这里插入图片描述

对于二维数据:在判断缺失的时候,一般是判断某一行或者某一列的缺失情况,而不是具体元素的缺失情况
isnull和notnull要配合一下两个函数来使用
any()某一行(或者列),如果有True则返回True
all()某一行(或者列),全为True则返回True

axis值默认是0,代表判断列上是否有True
axis=1的时候,代表判断行上是否有缺失
在这里插入图片描述

在这里插入图片描述

删除缺失的行或者列
axis代表在哪个维度上进行删除
how代表如何删除,取all这一行(列)全为缺失的时候删除,取any这一行(列)存在缺失就删除
在这里插入图片描述

填补缺失

  1. 用具体的指定的数值来填补
    在这里插入图片描述
  2. 向前填充
    axis=0 method='bfill’的时候,拿后面的行标对应的数值填充到前的而缺失
    在这里插入图片描述
    axis=1 method="bfill"的时候,拿后面的列标向对应的前面的缺失处填充
    在这里插入图片描述
  3. 向后填充
    当axis=0 method=‘ffill’的时候,拿前面的行标向后填
    在这里插入图片描述
    当axis=1 method=‘ffill’的时候,拿前面的列标向后填
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值