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

2022-12-30 09:26:12

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函数 说明
count np.count_nonzero 频率统计(不包含NaN值)
size 频率统计(包含NaN值)
mean np.mean 求平均值
std np.std 标准差
min np.min 最小值
quantile() np.percentile() 分位数
max np.max 求最大值
sum np.sum 求和
var np.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类型
  • 转换成时间序列类型后,可以按照时间的特点对数据进行处理
    • 提取日期的各个部分(月,日,星期…)
    • 进行日期运算
    • 按照日期范围取值
  • 作者:呆猛的呆呆小哥
  • 原文链接:https://blog.csdn.net/qq_45588318/article/details/127403376
    更新时间:2022-12-30 09:26:12