当前位置:   article > 正文

Python+大数据-数据分析与处理(四)-pandas数据处理_dataframe aggfuc

dataframe aggfuc

Python+大数据-数据分析与处理(四)-pandas数据处理

1. apply自定义函数

1.1 apply函数简介

pandas 的 apply() 函数可以作用于 Series 或者整个 DataFrame,功能也是自动遍历整个 Series 或者 DataFrame,对每一个元素运行指定的函数。

1)pandas 提供了很多数据处理的 API,但当提供的 API 不能满足需求的时候,需要自己编写数据处理函数, 这个时候可以使用 apply 函数

2)apply 函数可以接收一个自定义函数,可以将 DataFrame 的行或列数据传递给自定义函数处理

3)apply 函数类似于编写一个 for 循环,遍历行、列的每一个元素, 但比使用 for 循环效率高很多

  • Series 和 DataFrame 均可以通过 apply 传入自定义函数
  • DataFrame 也可通过 applymap 传入自定义函数
  • 有些时候需要通过 np 的 vectorize 函数才能进行向量化计算
  • lambda 表达式可用于创建一些匿名的简单函数

2. 数据分组操作

2.1 分组聚合操作

在 SQL 中我们经常使用 GROUP BY 将某个字段,按不同的取值进行分组,在 pandas 中也有 groupby 函数;

分组之后,每组都会有至少1条数据,将这些数据进一步处理返回单个值的过程就是聚合。

比如:分组之后计算算术平均值,或者分组之后计算频数,都属于聚合。

基本格式

方式说明
方式1: df.groupby(列标签, ...).列标签.聚合函数()按指定列分组,并对分组数据 的相应列进行相应的 聚合操作
方式2: df.groupby(列标签, ...).agg({'列标签': '聚合', ...}) df.groupby(列标签, ...).列表签.agg(聚合...)按指定列分组,并对分组数据 的相应列进行相应的 聚合操作
方式3: df.groupby(列标签, ...).aggregate({'列标签': '聚合', ...}) df.groupby(列标签, ...).列表签.aggregate(聚合...)按指定列分组,并对分组数据 的相应列进行相应的聚合操作

注意:

1)方式1 只能使用 pandas 内置的聚合方法,并且只能进行一种聚合

2)方式2 和 方式3 除了能够使用 pandas 内置的聚合方法,还可以使用其他聚合方法,并且可以进行多种聚合

2.1.1pandas内置的聚合方法

可以与groupby一起使用的方法和函数:

pandas方法Numpy函数说明
countnp.count_nonzero频率统计(不包含NaN值)
size频率统计(包含NaN值)
meannp.mean求平均值
stdnp.std标准差
minnp.min最小值
quantile()np.percentile()分位数
maxnp.max求最大值
sumnp.sum求和
varnp.var方差
describe计数、平均值、标准差,最小值、分位数、最大值
first返回第一行
last返回最后一行
nth返回第N行(Python从0开始计数)

2.2 transform 转换

  • transform 转换,需要把 DataFrame 中的值传递给一个函数, 而后由该函数"转换"数据
  • aggregate(聚合) 返回单个聚合值,但 transform 不会减少数据量

2.3 分组过滤

使用 groupby 方法还可以过滤数据,调用 filter 方法,传入一个返回布尔值的函数,返回 False 的数据会被过滤掉

2.4 DataFrameGroupBy 对象

  • 分组是数据分析中常见的操作,有助于从不同角度观察数据
  • 分组之后可以得到 DataFrameGroupby 对象,该对象可以进行聚合、转换、过滤操作
  • 分组之后的数据处理可以使用已有的内置函数,也可以使用自定义函数
  • 分组不但可以对单个字段进行分组,也可以对多个字段进行分组,多个字段分组之后可以得到MultiIndex数据,可以通过 reset_index 方法将数据变成普通的 DataFrame

3. 数据透视表

3.1 透视表概述

数据透视表(Pivot Table)是一种交互式的表,可以进行某些计算,如求和与计数等。所进行的计算与数据跟数据透视表中的排列有关。

之所以称为数据透视表,是因为可以动态地改变它们的版面布置,以便按照不同方式分析数据,也可以重新安排行号、列标和页字段。每一次改变版面布置时,数据透视表会立即按照新的布置重新计算数据。另外,如果原始数据发生更改,则可以更新数据透视表。

在使用 Excel 做数据分析时,透视表是很常用的功能,pandas 也提供了透视表功能,对应的 API 为 pivot_table

pandas pivot_table 函数介绍

方法说明
pd.pivot_table(df, ...)进行透视表操作
df.pivot_table(...)进行透视表操作

pivot_table 最重要的四个参数 values、index、columns、aggfunc,下面通过案例介绍 pivot_tabe 的使用

透视表实现

  • index:行索引,传入原始数据的列名
  • columns:列索引,传入原始数据的列名
  • values: 要做聚合操作的列名
  • aggfunc:聚合函数

3.2 总结

  • 透视表是数据分析中经常使用的 API,跟 Excel 中的数据透视表功能类似
  • pandas 的数据透视表:pivot_table,常用几个参数 index、values、columns、aggfuc、margin
  • pandas 的数据透视表功能与 groupby 功能类似

4. datatime数据类型

Python 内置了datetime 对象,可以在 datetime 库中找到

from datetime import datetime
# 获取当前时间
t1 = datetime.now()
t1
  • 1
  • 2
  • 3
  • 4

4.1 pandas中数据转换成datatime

# 查看前五行数据
ebola = pd.read_csv('./data/country_timeseries.csv')
ebola.iloc[:5, :5]

# 注:从数据中看出 Date 列是日期,但通过info查看加载后数据为object类型
ebola.info()

#可以通过 pandas 的 to_datetime方法把 Date 列转换为datetime,然后创建新列
ebola['Date_Dt'] = pd.to_datetime(ebola['Date'])
ebola.info()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

image-20221019103613940

#如果数据中包含日期时间数据,可以在加载的时候,通过parse_dates参数指定自动转换为 datetime
ebola = pd.read_csv('./data/country_timeseries.csv', parse_dates=[0])
ebola.info()

#可以看到得到的数据是Timestamp类型,通过Timestamp可以获取年、月、日等部分
# 通过 ebola 数据集的 Date 列,创建新列 year、month、day
ebola['year'] = ebola['Date'].dt.year
ebola['year']
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

image-20221019103849222

ebola['month'] = ebola['Date'].dt.month
ebola['day'] = ebola['Date'].dt.day
ebola[['Date','year','month','day']].head()
  • 1
  • 2
  • 3

image-20221019103924959

4.2 总结

  • pandas 中,datetime64用来表示时间序列类型
  • 时间序列类型的数据可以作为行索引,对应的数据类型是DatetimeIndex类型
  • datetime64类型可以做差,返回的是timedelta类型
  • 转换成时间序列类型后,可以按照时间的特点对数据进行处理
    • 提取日期的各个部分(月,日,星期…)
    • 进行日期运算
    • 按照日期范围取值
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/681770
推荐阅读
相关标签
  

闽ICP备14008679号