前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pandas技巧6

pandas技巧6

作者头像
皮大大
发布2021-03-02 15:07:03
2.6K0
发布2021-03-02 15:07:03
举报
文章被收录于专栏:机器学习/数据可视化

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

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

创建数据

S型数据
代码语言:javascript
复制
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
代码语言:javascript
复制
pd.DataFrame(np.random.randn(6,4), index=dates, columns=list("ABCD"))
df

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()
  • df.index/df.columns
  • df.describe() 查看各种统计信息
  • df.T 转置
  • df.sort_index(axis=0, ascending=False),行索引降序排列
  • df.sort_values(by=“age”),某个属性的降序排列

查看数据

缺失值处理

二者都是判断是不是缺失值


apply用法

代码语言:javascript
复制
# 求出每列的max 和 min
def f(x):    
    return pd.Series([x.min(), x.max()], index=["min", "max"])
df.apply(f)
代码语言:javascript
复制
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
代码语言:javascript
复制
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可以省略
代码语言:javascript
复制
# 按照职业分组,再对年龄求均值
df['age'].groupby(df['occupation']).mean()
避免层次化索引
  • 分组和聚合之后使用reset_index()
  • 在分组时,使用as_index=False

重塑reshaping

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

透视表

  • 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,要应用的聚合函数,默认函数是均值

关于pivot_table函数结果的说明

  • df是需要进行透视表的数据框
  • values是生成的透视表中的数据
  • index是透视表的层次化索引,多个属性使用列表的形式
  • columns是生成透视表的列属性
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建数据
    • S型数据
      • DF型数据
        • 选择数据
        • 查看数据
        • 缺失值处理
        • apply用法
        • 合并和连接
          • 合并concat
            • 连接merge
            • 分组
              • groupby
                • 避免层次化索引
                • 重塑reshaping
                • 透视表
                相关产品与服务
                数据库
                云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档