您当前的位置:首页 > 计算机 > 编程开发 > Python

pandas库的入门与必备知识

时间:05-18来源:作者:点击数:

pandas库–数据分析必备的库

  • pandas 熊猫
  • python data anlysis lib ----->pandas
  • 安装:pip install pandas
  • pandas基于numpy(点击numpy,查看关于numpy的相关知识)
  • pandas中两个常用的类:Series,DataFrame

数据分析都使用什么软件?

  • excel、SPSS、SAS
  • excel操作很简单
  • 数据分析,批量数据查找数据内在的规律

pandas是使用代码来处理数据,速度更快,灵活度更高

pandas中DataFrame其实就是excel类型数据

Pandas常用的描述性统计方法

在这里插入图片描述

Series创建:

import numpy as np
import pandas as pd
s = pd.Series([1, 3, 5, 7, 9])
s
s = Series(data = [120,136,128,99],index = ['Math','Python','En','Chinese'])
  • s.shape 查看形状
  • v = s.values v:就是ndarray
  • numpy中相应数学计算在pandas中的Series中都有

DataFrame创建:

df = DataFrame(data = np.random.randint(0,150,size = (10,3)),index = list('abcdefhijk'),columns=['Python','En','Math'])
  • df.shape 查看形状
  • v = df.values,二维的ndarray
  • 参数axis
    行 对应axis = 0
    列 对应axis = 1

pandas索引操作

Series索引
  • s[] 和 numpy中ndarray操作完全一样
  • s.loc[]用法和上面完全一样
  • s.iloc[] 使用的是自然索引,0开始依次增加……;
DataFrame索引
  • df[ ] 只能获取列属性,属性比行样本重要,直接使用[],不能对属性进行切片操作
  • df[ ]切片操作,对应的是行样本
  • df.loc[ ]检索行,不能检索列,df.loc[]切片和原来numpy一样
  • df.iloc[ ] 使用的是自然索引,0开始依次增加……;
  • df.iloc[::2,1:]既可以兑行进行切片,又可以对列进行切片
  • df[df.a > 0] 布尔切片,它可以实现筛选数据的目的。
数据排序
  • .sort_index(axis=int, ascending=bool) 其中axis表示对横轴设置,ascending对列索引进行设置
  • .sort_values(by = str)方法对数据进行按值排序,by设置为排序依据

pandas数据清洗

空数据处理

判断数据是否存在空数据

  • df.isnull().any():如果返回都是false,说明数据不存在空数据
  • df.notnull().all() :如果返回都是True,说明数据不存在空数据

DataFrame在显示的时候会将空数据表示成NaN(not a number)

df.isnull().sum():该方法统计了DataFrame中有多少个空数据,空数据的个数

df.tail() 显示数据的倒数5个

df[‘A’].value_counts() 统计A列中对应数据出现的个数

填充方式

  • df2.fillna(value=0) 填充固定值
  • 平均值填充(各个属性的平均值进行填充)
  • df3 = df2.fillna(value=df2.mean())
  • df3.astype(np.int16)
  • 填充中位数
  • 填充众数
  • 空数据填充,无论我们使用什么样规则,填充数据都不是真实数据
  • 填充原则:尽量让填充数据真实
  • 填充前置填充,后置填充,选取前面或后面最近一个合法(不为空)的值,进行填充

pandas多层索引的创建

DataFrame
df = DataFrame(np.random.randint(0,150,size = (6,3)),columns=['Python','En','Math'],index =pd.MultiIndex.from_product([['张三','李四','王五'],['期中','期末']]) )
多层索引对数据统计很有必要的
  • 多层索引的DataFrame数据获取
  • 先获取列后行 df[‘Python’][‘张三’][‘期中’]
  • 先获取行后列 df.loc[‘张三’].loc[‘期中’][‘Python’]
  • 注意多层索引和单层索引,数据获取类似,注意行和列获取方式不同的

pandas多层索引计算

* mean,max,std,var,min,sum,等等
df.mean(axis = 1,level = 1).round(1)
#axis = 1代表在列的方向的进行计算,列是多层,level指定计算那一层索引

行和列的多层索引,进行转换

	# 从列变成行
	df.stack(level = 1)

   #从行变成列
	df2.unstack(level= 0 )

pandas数据集成

数据分析数据挖掘,有数据情况下:
  1. 数据预处理
  2. 数据清洗(空数据,异常值)
  3. 数据集成(多个数据合并到一起,级联)数据可能存放在多个表中
  4. 数据转化
  5. 数据规约(属性减少(不重要的属性删除),数据减少去重操作)
numpy 级联方法
#原来数据一个5行,一个是6行,级联之后变成了11行
nd3 = np.concatenate([nd1,nd2],axis = 0)
#axis = 0行级联(第一维度的级联),axis = 1(第二个维度的级联,列的级联)
np.concatenate((nd1,nd2),axis = 1)
pandas进行数据的级联
  • df1.append(df2),和列表中append类似,不需要调整参数(注意,列属性需要相同)
  • pd.concat([df1,df2]) 默认行的级联,大部分使用行级联
  • pd.concat([df1,df2],axis = 1) axis = 1,列的级联,使用比较少
  • concat配合stack和unstack合并数据,并且进行表格形式的改变
pandas级联操作中很重要的方法是merge
  • 根据共同的属性进行融合
  • 两个DataFrame 属性不同,那么融合结果就会出现NaN空值
  • 当我们对数据进行处理,需要将处理的结果放到原来的DataFrame中时,可以使用merge

pandas分析人口数据

pandas读取数据csv类型的数据,可以读取的read_csv(参数)

merge使用的场合
  • 如果属性名字不同,那么我们需要告诉级联方法,级联时,分别根据哪个属性进行合并left_on;right_on
  • merge融合方式,选择,
    inner内连接(两个DataFrame都有的keys才会保留)
    outer(无论有没有都保留),outer融合方式数据绝对不会丢失情况,有可能出现空值
  • 删除一列:pop2.drop(labels = ‘abbreviation’,axis = 1,inplace=True)

pandas数据分析

查看哪些数据为空
  • 给判断,state这一列isnull(),boolean类型的值,Series
  • 使用条件进行数据的检索

DataFrame的高级功能,DataFrame索引和切片操作[],loc[],iloc[]

df[cond] cond 是条件,Series

去重操作,保留非重复值

pop2[cond][‘state/region’].unique()

数据清洗
cond = pop2['state/region'] == 'PR' 找到那些数据为空
pop2['state'][cond] = 'Puerto Rico'  对空数据进行赋值

#将难于进行补全的空数据进行删除,前提是,空数据比例很少
pop2.dropna(inplace=True)

pandas是操作数据的类库,数据特点行和列(excel表格),所以pandas进行操作是,excel类似,获取和数据操作类似

#pandas非常强大的,可以像查询数据库一样进行数据查询
pandas.query(sql)  

pop5 = pop4.query("year = = 2012 and ages == 'total'")
#重新设置行索引
pop5.set_index(keys = 'state/region')

pandas分组聚合操作

  • 在某一条件,查看数据的规律
  • 聚合:mean,max,min,std等
  • 分组聚合 根据某一共同属性进行聚合的意思
data = df.groupby(by = ['Hand'])[['weight','IQ']].mean().round(1)
#apply进行数据汇总
df.groupby(by = ['Hand'])[['weight']].apply(np.mean).round(1)
df.groupby(by = ['Hand'])[['weight']].transform(np.mean).round(1)

数据分析,非常重要,属性不同,结果不一样

pandas透视表和交叉表

透视表而言和分组一样
pd.pivot_table(df,values=['weight','IQ'],index = ['Hand']).round(1)
pd.pivot_table(df,values=['weight','IQ'],index = ['Hand','sex'],aggfunc=['mean','max','min']).round(1)
pd.pivot_table(df,values=['weight','IQ'],index=['Smoke'],aggfunc={'weight':'mean','IQ':'max'})
交叉表
  • 如果数据10000万,很多,没办法人工查看,对比这两组数据
  • 交叉表 ------ 对比 真实的数据和算法预测的数据的情况
  • 透视表可以将数据对比情况,一目了然
pd.crosstab(index=cancer_t,columns=cancer_p,rownames=['确诊'],colnames=['预测'],margins=True)
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门