df.applymap(func)#将Dataframe元素应用于函数
参数: func:Python函数从单个值返回单个值
返回 :转换后DataFrame
============================================================
实例:
df = pd.DataFrame(np.arange(4).reshape(2,2),columns=['A1','A2'])
df.applymap(lambda x:x**2)
A1 A2
0 0 1
1 4 9
format = lambda x: "%.2f" % x**2
df.applymap(format)
A1 A2
0 0.00 1.00
1 4.00 9.00
# 注意func矢量化版要快得多,若存在最好避免使用applymap
df ** 2
A1 A2
0 0 1
1 4 9
Series.map 2018/1/3
Series.map(arg,na_action =None)#用输入字典,系列或函数映射Series的值
参数: arg:function,dict或Series
na_action : {None, 'ignore'}如'ignore'则传播NA值
返回:系列; 与调用者相同的索引
# 实例1:将输入映射到输出(两种类型系列)
x = pd.Series([1,2,3], index=['a1', 'a2', 'a3'])
y = pd.Series(['b1', 'b2', 'b3'], index=[1,2,3])#映射Series
# x y x.map(y)
a1 1 1 b1 a1 b1
a2 2 2 b2 a2 b2
a3 3 3 b3 a3 b3
# 实例2:映射字典
# 实例2.1:映射字典
x = pd.Series([1,2,3], index=['a1', 'a2', 'a3'])
y = {1: 'A', 2: 'B', 3: 'C'}
x.map(y)
a1 A
a2 B
a3 C
# 实例2.2:arg是字典时系列中不在字典中的值(作为键)将转换为NaN。
# 如字典是dict定义的子类__missing__(提供默认值方法)则用此默认值
from collections import Counter
counter = Counter()
counter['b2'] += 1
x= pd.Series(['b1', 'b2', 'b3'], index=[1,2,3])
x.map(counter)
1 0
2 1
3 0
dtype: int64
#实例3:na_action控制NA值是否受映射函数影响
s1 = pd.Series([1, 2, 3, np.nan])
s2 = s.map('s={}'.format, na_action=None)
s3 = s.map('s={}'.format, na_action='ignore')
# s1 s2 s3
0 1.0 0 s=1.0 0 s=1.0
1 2.0 1 s=2.0 1 s=2.0
2 3.0 2 s=3.0 2 s=3.0
3 NaN 3 s=nan 3 NaN
dtype: float64 dtype: object dtype: object
data= pd.DataFrame({'item': [ 'S1' , 's2', 'S1' ,'s3','s4', 'S1' ,'s3' ,'S5' ,'s6' ],
'value' : [10,11,12,13,14,15,16,17,18]})
dict_data = {'s1':'v1','s2':'v1','s3':'v2' ,'s4' :'v2','s5': 'v1','s6' :'v3' }
data['A'] = data['item'].map(str.lower).map(dict_data)
result=data ['item'].map(lambda x: dict_data[x.lower()])
# data data result
item value item value A 0 v1
0 S1 10 0 S1 10 v1 1 v1
1 s2 11 1 s2 11 v1 2 v1
2 S1 12 2 S1 12 v1 3 v2
3 s3 13 3 s3 13 v2 4 v2
4 s4 14 4 s4 14 v2 5 v1
5 S1 15 5 S1 15 v1 6 v2
6 s3 16 6 s3 16 v2 7 v1
7 S5 17 7 S5 17 v1 8 v3
8 s6 18 8 s6 18 v3 Name: item, dtype: object