Zaoqi's Blog -> Python数据分析教程 -> 图解Pandas ->
map 与 applymap
map 与 applymap¶
pandas
中的 map
和 applymap
可以对指定列(map)或整个数据框(applymap)工作
完成替换、格式化、计算等操作,是 Pandas
数据分析中十分重要的工具。
在线刷题
检查 or 强化 Pandas
数据分析操作?👉在线体验「Pandas进阶修炼300题」
Note
本页面代码可以在线编辑、执行!
本页面数据说明¶
为了更好的介绍相关操作,你应该对数据字段、数值、类型等相关信息做一个大致了解!
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'A': ['A0', 'A1', np.nan, 'A3'],
'B': ['B0',np.nan,'B3',np.nan],
'C': ['C0','C1','C2',np.nan],
'D': np.random.randn(4),
'E': np.random.randn(4),
'F': np.random.randn(4)},
index=[0, 1, 2, 3])
df1
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
0 | A0 | B0 | C0 | -0.064109 | -0.101211 | 1.218837 |
1 | A1 | NaN | C1 | -0.840582 | 0.871039 | -0.415773 |
2 | NaN | B3 | C2 | -0.379854 | -1.352242 | 1.005507 |
3 | A3 | NaN | NaN | -0.501775 | 0.807550 | 1.578097 |
基本使用¶
将 df1
第一列中的 A0
替换为 cat
,A3
替换为 rabbit
,其余为设置为NaN
(缺失值)
df1['A'] = df1['A'].map({'A0':'cat','A3':'rabbit'})
df1
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
0 | cat | B0 | C0 | -0.064109 | -0.101211 | 1.218837 |
1 | NaN | NaN | C1 | -0.840582 | 0.871039 | -0.415773 |
2 | NaN | B3 | C2 | -0.379854 | -1.352242 | 1.005507 |
3 | rabbit | NaN | NaN | -0.501775 | 0.807550 | 1.578097 |
匿名函数¶
在上一题的结果上,将 df1 第 1 列中的字符末尾追加「今天关注了早起Python」
df1['A'] = df1['A'].map(lambda x:f'{x} 今天关注了早起Python')
df1
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
0 | cat 今天关注了早起Python | B0 | C0 | -0.064109 | -0.101211 | 1.218837 |
1 | nan 今天关注了早起Python | NaN | C1 | -0.840582 | 0.871039 | -0.415773 |
2 | nan 今天关注了早起Python | B3 | C2 | -0.379854 | -1.352242 | 1.005507 |
3 | rabbit 今天关注了早起Python | NaN | NaN | -0.501775 | 0.807550 | 1.578097 |
跳过缺失值¶
上一题中,nan(缺失值)也被同步追加了字符串
现在重新对第二列执行同样的操作,并跳过缺失值
df1['B'] = df1['B'].map(lambda x:f'{x} 今天关注了早起Python', na_action='ignore')
df1
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
0 | cat 今天关注了早起Python | B0 今天关注了早起Python | C0 | -0.064109 | -0.101211 | 1.218837 |
1 | nan 今天关注了早起Python | NaN | C1 | -0.840582 | 0.871039 | -0.415773 |
2 | nan 今天关注了早起Python | B3 今天关注了早起Python | C2 | -0.379854 | -1.352242 | 1.005507 |
3 | rabbit 今天关注了早起Python | NaN | NaN | -0.501775 | 0.807550 | 1.578097 |
自定义函数¶
除了 lambda ,map还可以接受自定义函数,现在对第三列,使用自定义函数完成上一题的任务
def mapfun(x):
return str(x) + "今天关注了早起Python"
df1['C'] = df1['C'].map(mapfun, na_action='ignore')
df1
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
0 | cat 今天关注了早起Python | B0 今天关注了早起Python | C0今天关注了早起Python | -0.064109 | -0.101211 | 1.218837 |
1 | nan 今天关注了早起Python | NaN | C1今天关注了早起Python | -0.840582 | 0.871039 | -0.415773 |
2 | nan 今天关注了早起Python | B3 今天关注了早起Python | C2今天关注了早起Python | -0.379854 | -1.352242 | 1.005507 |
3 | rabbit 今天关注了早起Python | NaN | NaN | -0.501775 | 0.807550 | 1.578097 |
applymap¶
applymap
可以对整个 dataframe
工作,现在将 df1 的最后三列保留两位小数
df1[['D','E','F']] = df1[['D','E','F']].applymap(lambda x:"%.2f" % x)
df1
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
0 | cat 今天关注了早起Python | B0 今天关注了早起Python | C0今天关注了早起Python | -0.06 | -0.10 | 1.22 |
1 | nan 今天关注了早起Python | NaN | C1今天关注了早起Python | -0.84 | 0.87 | -0.42 |
2 | nan 今天关注了早起Python | B3 今天关注了早起Python | C2今天关注了早起Python | -0.38 | -1.35 | 1.01 |
3 | rabbit 今天关注了早起Python | NaN | NaN | -0.50 | 0.81 | 1.58 |
On this page