python数据分析:pandas学习之DataFrame数组

开发环境

pycharm 专业版(2019.1.3)
python 3.7
ipython 7.8.0

上一小节中讲解了Serise数组: Series数组学习
DataFrame数组相当于就是一个pandas中的Series容器,当进行某些操作时,DataFrame数组就能够变为Series数组了。

pandas中DataFrame数组的创建

首先导入包

import pandas as pd
import numpy as np

如果没有,就在cmd中输入一下命令
在这里插入图片描述

创建DataFrame数组

  • DataFrame对象既有行索引,又有列索引
    行索引,表明不同行,横项索引,叫index, 0轴,axis=0
    列索引,表明不同列,纵项索引,叫columns, 1轴,axis=1
# 创建一个3行四列的DataFrame数组, 并指定DataFrame的行索引和列索引
d1 = pd.DataFrame(np.arange(12).reshape(3, 4), index=list("ABC"), columns=list("WXYZ"))

在这里插入图片描述
这样就完成了一个DataFrame数组的创建了
其实在DataFrame中不仅仅只能传列表,也可以传入字典作为参数传入到DataFrame中
字典参数
还能够在列表中嵌套字典传入, 缺失的值会自动使用NaN进行代替

# 在DataFrame中传入字典作为参数 ==> 列表中嵌套字典,缺失值显示为nan
t3 = [{"name": "xiaoming", "age": 18, "tel": 10085}, {"name": "xiaohong", "age": 16}, {"name": "xiaogang", "tel": 10010}]
# index 为行索引, columns为列索引, 指定d3的行索引
d3 = pd.DataFrame(t3, index=list("ABC"))

在这里插入图片描述

DataFrame的描述信息

首先创建一个DataFrame数组为df
在这里插入图片描述
DataFrame的基础属性
df.shape # 行数,形状
在这里插入图片描述
df.dtypes # 列数据的类型
在这里插入图片描述
df.ndim # 数据维度
在这里插入图片描述
df.index # 行索引
在这里插入图片描述
df.columns # 列索引
在这里插入图片描述
df.values # 对象值, 二维ndarray数组
在这里插入图片描述
DataFrame整体情况查询
df.head(2) # 显示头部几行, 默认为5行
在这里插入图片描述
df.tail(2) # 显示末尾几行, 默认为5行
在这里插入图片描述
df.info() # 相关信息概念:行数、列数、行索引、列索引非空值个数、行类型、列类型和内存占用
在这里插入图片描述
df.describe() # 快速综合统计结果: 计数、均值、标准差、最大值、四分位数、最小值
在这里插入图片描述
DataFrame中的排序方法, 默认为升序排序,by指定排序字段

# 创建DataFrame数组
t1 = [{"name": "xiaoming", "age": 18, "tel": 10085}, {"name": "xiaohong", "age": 16, "tel": 10013}, {"name": "xiaogang", "age": 29, "tel": 10010}]
d1 = pd.Dataframe(t1)

在这里插入图片描述
在DataFrame数组中有一个按照值进行排序的方法sort_values(),参数by为指定排序字段,ascending默认为升序排序,当为False时,降序排序
按照age字段进行降序排序
在这里插入图片描述

pandas中的索引

首先导入包,创建一个数组

import pandas as pd
import numpy as np

d1 = pd.DataFrame(np.arange(12).reshape((3, 4)), index=list("abc"), columns=list("WXYZ"))

在这里插入图片描述
pandas取行或取列的注意点:

  • 方括号写数组,表示取行,对行进行操作
  • 写字符串,表示取列索引,对列进行操作
    pandas中DataFrame数组取行与numpy之间有着一些相似之处,所以这里就据几个简单的例子,不一一赘述了
    取在W这一列的前两行数据
    在这里插入图片描述
    取前两行数据
    在这里插入图片描述
    还有两种为pandas之loc与iloc
  • df.loc: 通过标签索引行数据
  • df.iloc: 通过位置获取行数据

loc时通过标签索引来获取 数据的,那什么时标签呢?其实就是我们的index(行索引)与columns(列索引)所对应的值。
比如:
loc取d1中行索引标签为“a”, 列索引标签为“w”的值
在这里插入图片描述
用iloc来获取数据,就是使用索引下标的方法,用数字取值
iloc取d1中行索引标签为“a”, 列索引标签为“w”的值

在这里插入图片描述
赋值更改数据
更改数据很简单,只需要将值选取出来,然后赋值给它就可以了
将行索引为“a”,列索引为“W”的值修改为10
在这里插入图片描述
这样即可完成修改

bool索引和缺失数据的处理

现在我们有一个DataFrame数组d3是这样的
在这里插入图片描述
下面有一个小需求,取"W"这一列中大于0小于8的数组
或许我们会使用这种方法来取值
在这里插入图片描述
但是这种方法是不可取的,在pandas中要执行多条件,听该使用”&“符号和”|“符号,并且不同的条件之间需要用小括号括起来
在这里插入图片描述
pandas之布尔索引

& ==> 且
| ==> 或
注意点: 不同的条件之间需要用括号括起来

t2 = {"dog_name": ["duke", "max", "lucky", "boys", "friday", "monday"],
      "dog_count": [5, 9, 13, 4, 6, 9]}
d2 = pd.DataFrame(t2)
# 查找使用次数超过5,并且字符串长度大于4的狗的名字, str是将数据转化为字符串的方法
result = d2["dog_name"][(d2["dog_name"].str.len() > 4) & (d2["dog_count"] >= 5)]

在这里插入图片描述

缺失数据的处理
对于nan的数据,在numpy中我们是如何处理的
在pandas中我们处理起来非常容易
在pandas中判断数据为nan, pd.isnull(d1), pd.notnull(d1)
pd.isnull()方法会查看数组中哪些值是nan,以bool值形式类型返回,而pd.notnull()则与pd.isnull相反
pd.isnull()
pd.notnull()查看哪些值不是nan
在这里插入图片描述
处理方式1: 删除NaN所在的行列,dropna(axis=0, how=“any”,inplace = False) # any代表有nan的行都会被删除,除了any之外,还有all,all表示一行中全为nan才会被删除, inplace 表示是否进行替换
当参数how="any"时,如横轴上有nan,那么这一行被删除
在这里插入图片描述
当how="all"时,横轴上所有的值为NaN才进行删除
在这里插入图片描述
参数inplace表示是否进行替换, 类似于d1 = d1.dropna(axis=0,how=“any”)
在这里插入图片描述

处理方式2:填充数据,t,fillna(t.mean()), t.fillna(t.median()), t.fillna(0) , 填充均值,填充中值,填充0
填充均值
均值填充
填充中值
在这里插入图片描述

将NaN的值替换为0
在这里插入图片描述

处理为0的数据: d3[d3==0] = np.nan
加粗样式
当时并不是每次为0的数据都需要被处理,计算平均值等情况,nan是不参与计算的,但是0会

d3[pd.notnull(d3["W"])]  # 选中d3中W这一列没有nan的数组

在这里插入图片描述

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值