【Pandas-05】转换函数map、apply、applymap、日期数据、日期索引缺失
一、数据转换函数map、apply、applymap
数据转换函数对比:map、apply、applymap:
- map:只用于Series,实现每个值->值的映射;
- apply:用于Series实现每个值的处理,用于Dataframe实现某个轴的Series的处理;
- applymap:只能用于DataFrame,用于处理该DataFrame的每个元素;
数据集:
1 map用于Series值的转换
实例:将股票代码英文转换成中文名字
Series.map(dict) or Series.map(function)均可
方法1:Series.map(dict)
方法2:Series.map(function)
function的参数是Series的每个元素的值
注意:也可以通过函数来进行替换。
2 apply用于Series和DataFrame的转换
- Series.apply(function), 函数的参数是每个值
- DataFrame.apply(function), 函数的参数是Series
Series.apply(function)
function的参数是Series的每个值
DataFrame.apply(function)
function的参数是对应轴的Series
再举个例子
import pandas as pd
路径 = 'c:/pandas/数据.xlsx'
数据 = pd.read_excel(路径)
def BMI(数据):
身高 = 数据['身高']
体重 = 数据['体重']
BMI = 体重/身高 **2
return BMI
数据['BMI'] = 数据.apply(BMI,axis=1)
print(数据)
3 applymap用于DataFrame所有值的转换
它的用法非常简单,会对DataFrame中的每个单元格执行指定函数的操作,虽然用途不如apply广泛,但在某些场合下还是比较有用:
二、对每个分组应用apply函数
1 怎样对数值列按分组的归一化
数据集合:
2 怎样取每个分组的TOPN数据?
三、日期数据
处理日期数据
Pandas日期处理的作用:将2018-01-01、1/1/2018等多种日期格式映射成统一的格式对象,在该对象上提供强大的功能支持
几个概念:
- pd.to_datetime:pandas的一个函数,能将字符串、列表、series变成日期形式
- Timestamp:pandas表示日期的对象形式
- DatetimeIndex:pandas表示日期的对象列表形式
其中:
- DatetimeIndex是Timestamp的列表形式
- pd.to_datetime对单个日期字符串处理会得到Timestamp
- pd.to_datetime对日期字符串列表处理会得到DatetimeIndex
问题:怎样统计每周、每月、每季度的最高温度?数据如下:
1 将日期列转换成pandas的日期
2 方便的对DatetimeIndex进行查询
按照年份也类似:df.loc["2018"].head()
3 方便的获取周、月、季度
4 统计每周、每月、每个季度的最高温度
四、日期索引的缺失
可以用两种方法实现:
1、DataFrame.reindex,调整dataframe的索引以适应新的索引
2、DataFrame.resample,可以对时间序列重采样,支持补充缺失值
数据:
方法1:使用pandas.reindex方法
1、将df的索引变成日期索引
2、使用pandas.reindex填充缺失的索引
或以下生成日期序列:
方法2:使用pandas.resample方法
1、先将索引变成日期索引
2、使用dataframe的resample的方法按照天重采样
resample的含义:
改变数据的时间频率,比如把天数据变成月份,或者把小时数据变成分钟级别
resample的语法:
(DataFrame or Series).resample(arguments).(aggregate function)
resample的采样规则参数:
https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases
参考文献
Series.str字符串方法列表:https://pandas.pydata.org/pandas-docs/stable/reference/series.html#string-handling