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

本文介绍了Pandas库中apply函数的使用,包括自定义函数应用于DataFrame和Series,以及数据分组操作。重点讲解了groupby的聚合、转换和过滤功能,以及透视表的创建和使用,例如pivot_table函数。此外,还探讨了如何处理datetime数据类型,包括日期的提取和转换。内容涵盖了数据分析中的关键步骤,提供了解决方案和实用技巧。
摘要由CSDN通过智能技术生成

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

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()

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']

image-20221019103849222

ebola['month'] = ebola['Date'].dt.month
ebola['day'] = ebola['Date'].dt.day
ebola[['Date','year','month','day']].head()

image-20221019103924959

4.2 总结

  • pandas 中,datetime64用来表示时间序列类型
  • 时间序列类型的数据可以作为行索引,对应的数据类型是DatetimeIndex类型
  • datetime64类型可以做差,返回的是timedelta类型
  • 转换成时间序列类型后,可以按照时间的特点对数据进行处理
    • 提取日期的各个部分(月,日,星期…)
    • 进行日期运算
    • 按照日期范围取值
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值