pandas小结(超全)

作者: 皮皮大 | 来源:发表于2019-10-13 16:33 被阅读0次

本篇博文主要是对之前的几篇关于pandas使用技巧的小结,内容包含:

  • 创建S型或者DF型数据,以及如何查看数据
  • 选择特定的数据
  • 缺失值处理
  • apply使用
  • 合并和连接
  • 分组groupby机制
  • 重塑reshaping
  • 透视表使用

创建数据

S型数据

import numpy as np
import pandas as pd

pd.Series([1, 3, 5, np.nan, 6, 89])  # 普通形式
pd.date_range('20190924', periods=6)  # 时间间隔形式

DF型数据

指定3个参数

  • values
  • index
  • columns
pd.DataFrame(np.random.randn(6,4), index=dates, columns=list("ABCD"))

pd.DataFrame({'A': 1.,   #  某列的值相同
                    'B': pd.Timestamp('20130102'),  # 时间戳的创建
                    'C': pd.Series(1, index=list(range(4)), dtype='float32'),  # 某列值可以是S型数据
                    'D': np.array([3] * 4, dtype='int32'),  # 使用numpy数组
                    'E': pd.Categorical(["test", "train", "test", "train"]), # 不同的类
                    'F': 'foo'})  # 使用布尔值

选择数据

  • head(),默认是头5行
  • tail(),尾5行
  • df.index/df.columns 查看行索引和列属性
  • df.describe() 查看各种统计信息
  • df.T 转置
  • df.sort_index(axis=0, ascending=False),行索引降序排列
  • df.sort_values(by="age"),某个属性的降序排列

查看数据

  • lociloc

    • loc:通过标签获取,等同于.at
    • iloc:通过数字索引获取,等同于.iat
df.loc[[......]]:可以使用数字索引,也可以使用标签索引,还可以用切片的形式

df.iloc[[.....]]:只能使用数字索引,可以是非连续或者连续(等差形式也OK)

布尔索引:df2[df2['E'].isin(['two', 'four'])]

同时指定行和列:

df.loc[:, ["A","B"]]

df.iloc[[1, 2, 4], [0, 2]]

缺失值处理

  • df.dropna()删除缺失值

    • axis:维度,0表示index行,1表示columns列,默认为0

    • how:

      • all:全部为缺失值则删除该行或者列
      • any:至少有一个则删除
  • thresh:指定至少出现了thresh个才删除

  • subset:指定在某些列的子集中选择出现了缺失值的列删除,不在子集中不会删除(axis决定行\列)

  • inplace:刷选过缺失值得到的新数据是存为副本还是直接在原数据上进行修改。

  • df.fillna()填充缺失值

    • value:使用什么填充缺失值,不同的列可以使用不同的值

    • axis:指定填充维度

    • method:填充方法,不能和value同时出现,避免冲突

      • ffill:用缺失值的前一个值进行填充,axis=1:横向填充(前后),axis=0:纵向填充(上下)
      • backfill、bfill:缺失值后面的一个填充代替前一个
  • limit:填充的次数限制

  • df.isnull()df.isna(): 二者都是判断是不是缺失值

apply用法

# 求出每列的max 和 min
def f(x):    
    return pd.Series([x.min(), x.max()], index=["min", "max"])
df.apply(f)
f = lambda x: x.max() - x.min()
df.apply(f)# df.apply(f, axis="columns") 表示在行上执行

合并和连接

合并concat

  • axis
    • axis=0:默认是Series
    • axis=1:得到DF数据,缺值用NaN补充
  • join
    • outer:合并,缺值用nan
    • inner:求交集,非交集部分直接删除
  • keys:用于层次化索引
  • ignore_index:不保留连接轴上的索引,产生新的索引

连接merge

可根据⼀个或多个键将不同DataFrame中的⾏连接起来,它实现的就是数据库的join操作 ,就是数据库风格的合并

常用参数表格

参数 说明
left 参与合并的左侧DF
right 参与合并的右侧DF
how 默认是inner,inner、outer、right、left
on 用于连接的列名,默认是相同的列名
left_on \right_on 左侧、右侧DF中用作连接键的列
sort 根据连接键对合并后的数据进行排序,默认是T
suffixes 重复列名,直接指定后缀,用元组的形式('_left', '_right')
left_index、right_index 将左侧、右侧的行索引index作为连接键(用于index的合并)

分组

groupby

  • 拆分:groupby,按照某个属性column分组,得到的是一个分组之后的对象
  • 应用:对上面的对象使用某个函数,可以是自带的也可以是自己写的函数,通过apply(function)
  • 合并:最终结果是个S型数据
()

如何找出每一种职业的平均年龄?并按照平均年龄从大到小排序?

  • 分组用groupby

  • 求平均mean()

  • 排序sort_values,默认是升序asc

  • 操作某个列属性,通过属性的方式df.column

df.groupby("occupation").age.mean().sort_values(ascending=False)  # 默认是升序
# df.groupby(df["occupation"]).age.mean().sort_values(ascending=False)
# df.groupby(by="occupation").age.mean().sort_values(ascending=False)  by可以省略

# 按照职业分组,再对年龄求均值
df['age'].groupby(df['occupation']).mean()

避免层次化索引

  • 分组和聚合之后使用reset_index()

  • 在分组时,使用as_index=False

重塑reshaping

  • stack:将数据的列旋转成行,AB由列属性变成行索引

  • unstack:将数据的行旋转成列,AB由行索引变成列属性

image image

透视表

  • data: a DataFrame object,要应用透视表的数据框

  • values: a column or a list of columns to aggregate,要聚合的列,相当于“值”

  • index: a column, Grouper, array which has the same length as data, or list of them. Keys to group by on the pivot table index. If an array is passed, it is being used as the same manner as column values,聚合值的分组,相当于“行”

  • columns: a column, Grouper, array which has the same length as data, or list of them. Keys to group by on the pivot table column. If an array is passed, it is being used as the same manner as column values,聚合值的分组,相当于是”列”

  • aggfunc: function to use for aggregation, defaulting to numpy.mean,要应用的聚合函数,默认函数是均值

image

关于pivot_table函数结果的说明

  • df是需要进行透视表的数据框

  • values是生成的透视表中的数据

  • index是透视表的层次化索引,多个属性使用列表的形式

  • columns是生成透视表的列属性

相关文章

  • pandas小结(超全)

    本篇博文主要是对之前的几篇关于pandas使用技巧的小结,内容包含: 创建S型或者DF型数据,以及如何查看数据 选...

  • pandas 小结

    很早之前就听说pandas数据是一个很强的工具,但是自己一直懒得看,周末朋友让帮忙,便看了看。pandas有很强的...

  • Pandas小结

    作为最像excel与sql结合体的pandas,完美集合了二者的优点。 本周以跟随大部队pandas为主要任务,整...

  • pandas中DataFrame的连接操作:join

    标签:pandas pandas中的DataFrame变量的join连接总是记不住,在这里做一个小结,参考资料是官...

  • Pandas学习小结【1】数据结构

    网上找资料学习pandas, 小结下学习心得。 从数据类型来说,pandas主要数据结构有四种,Series,Da...

  • pandas 基本用法

    因为以前很少用pandas,但这两周用它处理数据比较多,因此做下小结。我的感受应该和大家一样,就是pandas处理...

  • 20.6.8 pandas小结

    之前学习过pandas了,不过今天又系统学习一遍, 温故而知新嘛,学pd主要是在数据分析的应用。 易错点: 1.a...

  • Pandas常用小结

    总结下自己常用的内容,想要系统了解学习的,强烈建议阅读官方文档,时间有限的话,阅读官方Get started和Tu...

  • python 3.6 透视表pivot_table和交叉表

    小结: pandas库的参数变了不少,一定要先去官网升级到最新版的pandas,然后下载一个详细RN用于查询。 透...

  • 05 常见bug处理 (必会知识点)

    html:全栈记03【html小结】 - 简书 css:全栈记04【css小结】 - 简书 常见bug处理: 小知...

网友评论

    本文标题:pandas小结(超全)

    本文链接:https://www.haomeiwen.com/subject/lhfkmctx.html