一文让你快速上手Pandas(二)

简介: 一文让你快速上手Pandas

数值变量分段

pd.cut(
 X :希望逬行分段的变量列名称
 bins :具体的分段设定
 int :被等距等分的段数
 sequence of scalars :具体的每一个分段起点,必须包括最值,可不等距
 right = True :每段是否包括右侧界值
 labels = None :为每个分段提供自定义标签
 include_lowest = False :第一段是否包括最左侧界值,需要和
 right 参数配合
)

#分段结果是数值类型为 Categories 的序列


pd.qcut # 按均值取值范围进行等分

#按均值取值范围进行等分
df['cut1'] = pd.qcut(df.身高,q=5)
#自定义分段
df['cut2'] = pd.cut(df.身高,bins=[150,160,170,180,190],right=False)

数据分组

df.groupby(
 by :用于分组的变量名/函数
 level = None :相应的轴存在多重索引时,指定用于分组的级别
 as_index = True :在结果中将组标签作为索引
 sort = True :结果是否按照分组关键字逬行排序
)#生成的是分组索引标记,而不是新的 df

基于拆分进行筛选


筛选出其中一组 dfgroup.get_group()

dfg.get_group ('不必要').mean ()
dfg.get_group ('不必要').std ()

筛选出所需的列


该操作也适用于希望对不同的变量列进行不同操作时


分组汇总

在使用 groupby 完成数据分组后,就可以按照需求进行分组信息汇 总,此时可以使用其 它专门的汇总命令,如 agg 来完成汇总操作。


使用 agg 函数进行汇总


df.aggregate( ) 名称可以直接简写为 agg




dfg.agg( 'count')
dfg.agg('median')
dfg.agg(['mean', 'median'])
dfg.agg(['mean', 'median'])
#引用非内置函数
import numpy as np
df2.身高.agg (np. sum)
dfg.身高.agg (np. sum)

多个数据源的合并

数据的纵向合并

df.append(
 other :希望添加的 DF/Series/字典/上述对象的列表使用列表方式,就可以实现一次合并多个新对象
 ignore_index = False :添加时是否忽略索引
 verify_integrity = False :是否检查索引值的唯一性,有重复时报错
)
df = df.append( [df2, df3, df4])

数据的横向合并

merge 命令使用像 SQL 的连接方式


pd.merge(
 需要合并的 DF
 left :需要合并的左侧 DF
 right :需要合并的右侧 DF
 how = ' inner':具体的连接类型
 {left、right 、outer 、 inner、)
 两个 DF 的连接方式
 on :用于连接两个 DF 的关键变量(多个时为列表),必须在两侧都出现
 left_on :左侧 DF 用于连接的关键变量(多个时为列表)
 right_on :右侧 DF 用于连接的关键变量(多个时为列表)
 left_index = False :是否将左侧 DF 的索引用于连接
 right_index = False :是否将右侧 DF 的索引用于连接
)

concat 命令

同时支持横向合并与纵向合并


pd.concat(
 objs :需要合并的对象,列表形式提供
 axis = 0 :对行还是对列方向逬行合并
 (0 index 、 1 columns )
 join = outer :对另一个轴向的索引值如何逬行处理
 (inner 、outer )
 ignore_index = False
 keys = None :为不同数据源的提供合并后的索引值
 verify_integrity = False 是否检查索引值的唯一性,有重复时报错
 copy = True
)
ser1=pd.Series([1,2,3],index=list('ABC'))
ser2=pd.Series([4,5,6],index=list('DEF'))
pd.concat([ser1,ser2])

处理缺失值


认识缺失值


系统默认的缺失值 None 和 np. nan


缺失值查看


直接调用info()方法就会返回每一列的缺失情况。


Pandas中缺失值用NaN表示,从用info()方法的结果来看,索引1这 一列是1 2 non-null float64,表示这一列有2个非空值,而应该是 3个非空值,说明这一列有1个空值。 还可以用isnull()方法来判断哪个值是缺失值,如果是缺失值则返回 True,如果不是缺失值返回False。 df.isna(): 检查相应的数据是否为缺失值 同 df.isnull()。 df.notna()等同于notnull()


检查多个单元格的取值是否为指定缺值


df.any(
 axis : index (0), columns (1)
 skipna = True :检查时是否忽略缺失值
 level = None :多重索引时指定具体的级别
)
df.all(
 axis : index (0), columns (1)
 skipna = True :检查时是否忽略缺失值
 level = None :多重索引时指定具体的级别

填充缺失值


调用fillna()方法对数据表中的所有缺失值进行填充,在fillna()方法 中输入要填充的值。还可以通过method参数使用前一个数和后一 个数来进行填充。

df.fillna(
 value :用于填充缺失值的数值,也可以提供dict/Series/DataFrame 以进—步指明哪些索引/列会被替换不能使用 list
 method = None :有索引时具体的填充方法,向前填充,向后填充等
 limit = None :指定了 method 后设定具体的最大填充步长,此步长不能填充
 axis : index (0), columns (1)
 inplace = False
)
data=pd.Series([3,4,np.nan,1,5,None])
print('以0进行填充:')
print(data.fillna(0))
print('以前一个数进行填充:')
print(data.fillna(method='ffill'))
print('以后一个数进行填充:')
print(data.fillna(method='bfill'))
print('先按前一个,再按后一个')
print(data.fillna(method='bfill').fillna(method='ffill'))

删除缺失值

调用dropna()方法删除缺失值,dropna()方法默认删除含有缺失值 的行,也就是只要某一行有缺失值就把这一行删除。如果想按列为 单位删除缺失值,需要传入参数

df.dropna(
 axis = 0 : index (0), columns (1)
 how = any : any、all
 any :任何一个为 NA 就删除
 all :所有的都是 NA 删除
 thresh = None :删除的数量阈值,int
 subset :希望在处理中包括的行/列子集
 inplace = False :
)
df=pd.DataFrame([[1,2,np.nan],[4,np.nan,6],[5,6,7]])
print('默认为以行为单位剔除:')
print(df.dropna())
print('以列为单位剔除:')
df.dropna(axis='columns')

数据查重

标识出重复的行


标识出重复行的意义在于进一步检査重复原因,以便将可能的错误 数据加以修改


Duplicated

df['dup' ] = df.duplicated( ['课程','开设'])

利用索引进行重复行标识 df.index.duplicated()

df2 = df.set_index ( ['课程','开设'] )
df2.index.duplicated ()

直接删除重复的行

drop_duplicates (
 subset=“ ”按照指定的行逬行去重
 keep='first' 、 'last' 、 False 是否直接删除有重复的所有记录
)
df. drop_duplicates ( ['课程', '开设' ] )
df. drop_duplicates ( ['课程', ‘开设' ] , keep= False )

日期时间变量

Timestamp

from datetime import datetime
pd.Timestamp(datetime(2032,1,1))
pd.Timestamp(datetime(2032,1,2,3,4,5))
pd.Timestamp(2032,1,2)
pd.Timestamp('2032-01-02 3:4:5')

Peroid


可以被看作是简化之后的 Timestamp 对象


由于详细数据的不完整,而表示的是一段时间,而不是一个时点 但是实际使用中很可能是按照时点在使用 很多使用方法和 Timestamp 相同,因此不再详细介绍

pd.Period('2032-01')
pd.Period('2032-01',freq='D')#精确到日

数据交叉表

df.pivot_table(
 行列设定
    index / columns :行变量/列变量,多个时以list 形式提供
 单元格设定
    values :在单元格中需要汇总的变量列,可不写
    aggfunc = numpy.mean : 相应的汇总函数
 汇总设定
    margins = False :是否加入行列汇总
    margins_name = 'All':汇总行/列的名称
 缺失值处理
    fill_value = None :用于替换缺失值的数值
    dropna = True 
pd.crosstab(
选项和 pivot_table 几乎相同
相对而言需要打更多字母,因此使用更麻烦
但是计算频数最方便
输出格式为数据框 )
df.pivot_table(index = ['课程','性别'],
columns='开设',values = ['体重','身高'],aggfunc='sum')
pd.crosstab(index=[df.课程],columns=df.开设,values=df.体重,aggfunc=sum)

数据的图形展示

df.plot(
    绘图用数据
    data :数据框
    x = None:行变量的名称/顺序号
    y = None :列变量的名称/顺序号
kind = 'line':需要绘制的图形种类
 line : line plot (default)
 bar : vertical bar plot
 barh : horizontal bar plot
 hist : histogram
 box : boxplot
 kde : Kernel Density Estimation plot
 density : same as kde
 area : area plot
 pie : pie plot
 scatter : scatter plot
 hexbin : hexbin plot
各种辅助命令
 figsize : a tuple (width, height) in inches
 xlim / ylim : X/Y 轴的取值范围,2-tuple/list 格式
 logx / logy / loglog = False :对 X/Y/双轴同时使用对数尺度
 title : string or list
 Alpha :图形透明度,0-1
图组命令
 subplots = False :是否分图组绘制图形
 sharex :是否使用相同的 X 坐标
 ax = None 时,取值为 True,否则取值为 False
 sharey = False :是否使用相同的 Y 坐标
 ax = None :需要叠加的 matplotlib 绘图对象


图形种类的等价写法 df.plot.kind()


配置绘图系统环境

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #
指定默认字体 SimHei为黑体
plt.figure ()
import seaborn as sns
sns.set_style('whitegrid')
pd.value_counts(df.课程).plot.bar()
pd.value_counts(df.课程).plot(kind='bar')
pd.value_counts(df.课程).plot.barh()

整理不易,希望对学习Pandas的小伙伴有所帮助!


目录
相关文章
|
8天前
|
SQL 数据采集 数据挖掘
Pandas 教程
10月更文挑战第25天
19 2
|
3月前
|
SQL Serverless 数据库
Pandas学习笔记之常用功能
Pandas学习笔记之常用功能
|
索引 Python
pandas 入门
pandas 入门
132 0
pandas 入门
|
存储 SQL 数据挖掘
一文让你快速上手Pandas(一)
一文让你快速上手Pandas
159 0
一文让你快速上手Pandas(一)
|
数据可视化 数据挖掘 数据处理
pandas 入门(一)
本文其实属于:Python的进阶之道【AIoT阶段一】的一部分内容,本篇把这部分内容单独截取出来,方便大家的观看,本文介绍 pandas 入门,后续还会单独发一篇 pandas 高级以及 pandas 进阶内容供读者学习。
260 0
pandas 入门(一)
|
数据库 开发者 索引
Pandas 基础3|学习笔记
快速学习 Pandas 基础3
Pandas 基础3|学习笔记
|
索引 Python
pandas 入门(四)
本文其实属于:Python的进阶之道【AIoT阶段一】的一部分内容,本篇把这部分内容单独截取出来,方便大家的观看,本文介绍 pandas 入门,后续还会单独发一篇 pandas 高级以及 pandas 进阶内容供读者学习。
161 0
pandas 入门(四)
|
存储 索引 Python
pandas 入门(二)
本文其实属于:Python的进阶之道【AIoT阶段一】的一部分内容,本篇把这部分内容单独截取出来,方便大家的观看,本文介绍 pandas 入门,后续还会单独发一篇 pandas 高级以及 pandas 进阶内容供读者学习。
143 0
pandas 入门(二)
|
C++ 索引 Python
pandas 入门(三)
本文其实属于:Python的进阶之道【AIoT阶段一】的一部分内容,本篇把这部分内容单独截取出来,方便大家的观看,本文介绍 pandas 入门,后续还会单独发一篇 pandas 高级以及 pandas 进阶内容供读者学习。
203 0
pandas 入门(三)
|
开发者 索引 Python
Pandas 基础4|学习笔记
快速学习 Pandas 基础4
下一篇
无影云桌面