赞
踩
pandas 的 apply()
函数可以作用于 Series
或者整个 DataFrame
,功能也是自动遍历整个 Series
或者 DataFrame
,对每一个元素运行指定的函数。
1)pandas 提供了很多数据处理的 API,但当提供的 API 不能满足需求的时候,需要自己编写数据处理函数, 这个时候可以使用 apply 函数
2)apply 函数可以接收一个自定义函数,可以将 DataFrame 的行或列数据传递给自定义函数处理
3)apply 函数类似于编写一个 for 循环,遍历行、列的每一个元素, 但比使用 for 循环效率高很多
在 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 内置的聚合方法,还可以使用其他聚合方法,并且可以进行多种聚合
可以与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开始计数) |
使用 groupby 方法还可以过滤数据,调用 filter 方法,传入一个返回布尔值的函数,返回 False 的数据会被过滤掉
数据透视表(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 的使用
透视表实现:
Python 内置了datetime 对象,可以在 datetime 库中找到
from datetime import datetime
# 获取当前时间
t1 = datetime.now()
t1
# 查看前五行数据
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()
#如果数据中包含日期时间数据,可以在加载的时候,通过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']
ebola['month'] = ebola['Date'].dt.month
ebola['day'] = ebola['Date'].dt.day
ebola[['Date','year','month','day']].head()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。