import pandas as pd
impodt numpy as np
替换
①df.where:替换不满足条件的值
②df.mask :替换满足条件的值
③np.where:替换满足条件的值
④df.loc[条件,列名]=替换的值
df.where('cond', 'other', inplace=False)
df.mask('cond','other',inplace=False)
cond:条件
other:需要替换的值
inplace:是否在原有的数据上进行替换
where 与mask 相反
np.where(条件,原来的数据,需要替换的数据)
df = pd.DataFrame({'AAA': [4, 5, 6, 7],
'BBB': [10, 20, 30, 40],
'CCC': [100, 50, -30, -50]})
df
AAA
BBB
CCC
0
4
10
100
1
5
20
50
2
6
30
-30
3
7
40
-50
df_mask = pd.DataFrame({'AAA': [True] * 4,
'BBB': [False] * 4,
'CCC': [True, False] * 2})
df_mask
AAA
BBB
CCC
0
True
False
True
1
True
False
False
2
True
False
True
3
True
False
False
① df.where(df_mask,1000) 将标记为False的替换为1000
AAA
BBB
CCC
0
4
1000
100
1
5
1000
1000
2
6
1000
-30
3
7
1000
1000
② df.mask(df_mask,1000) 将标记为True的替换为1000
AAA
BBB
CCC
0
1000
10
1000
1
1000
-1
50
2
1000
-1
1000
3
1000
-1
-50
③ np.where(df_mask,df,1000) 将所有标记为False的替换为1000
0
1
2
0
4
1000
100
1
5
1000
1000
2
6
1000
-30
3
7
1000
1000
④ df.loc[df.AAA>4,‘BBB’]=1000 将满足条件的某列进行替换
AAA
BBB
CCC
0
4
10
100
1
5
1000
50
2
6
1000
-30
3
7
1000
-50
applymap的使用
df = pd.DataFrame({'AAA': [1, 2, 1, 3],
'BBB': [1, 1, 2, 2],
'CCC': [2, 1, 3, 1]})
df
AAA
BBB
CCC
0
1
1
2
1
2
1
1
2
1
2
3
3
3
2
1
source_cols=df.columns
new_cols=[str(x)+'_cat' for x in source_cols]
categories = {1: 'Alpha', 2: 'Beta', 3: 'Charlie'}
df[new_cols]=df[source_cols].applymap(categories.get)
AAA
BBB
CCC
AAA_cat
BBB_cat
CCC_cat
0
1
1
2
Alpha
Alpha
Beta
1
2
1
1
Beta
Alpha
Alpha
2
1
2
3
Alpha
Beta
Charlie
3
3
2
1
Charlie
Beta
Alpha