# pandas-05 map和replace操作
map可以做一個映射,對於操作大型的dataframe來說就非常方便了,而且也不容易出錯。replace的作用是替換,這個很好理解。
import numpy as np
import pandas as pd
from pandas import Series, DataFrame
# create a dataframe
df1 = DataFrame({'城市':['北京', '上海', '廣州'], '人口':[1000, 2000, 1500]})
print(df1)
# 添加一列
# df1['GDP'] = Series([1000, 3000, 2000])
# print(df1)
'''
人口 城市 GDP
0 1000 北京 1000
1 2000 上海 3000
2 1500 廣州 2000
'''
dfp_map = {'北京':1000, '上海':2000, '廣州':3000}
df1['GDP'] = df1['城市'].map(dfp_map)
print(df1)
'''
人口 城市 GDP
0 1000 北京 1000
1 2000 上海 2000
2 1500 廣州 3000
總結:
使用map還是比創建series有優勢的,使用map就可以不關心dataframe的index,
只需要關注對應的城市即可。
注意下面的實驗
'''
# 再做一個實驗,添加一個index
df2 = DataFrame({'城市':['北京', '上海', '廣州'], '人口':[1000, 2000, 1500]}, index=['A', 'B', 'C'])
print(df2)
'''
人口 城市
A 1000 北京
B 2000 上海
C 1500 廣州
'''
df2['GDP'] = Series([1000, 2000, 3000])
print(df2)
'''
人口 城市 GDP
A 1000 北京 NaN
B 2000 上海 NaN
C 1500 廣州 NaN
可以看到答案是nan,這是為什么呢?因為 Series([1000, 2000, 3000])的索引默認是0,1,……
所以就出現了問題。
解決方法是:必須要給series添加指定的索引。
'''
# replace in series
s1 = Series(np.arange(10))
print(s1)
'''
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
dtype: int64
'''
print(s1.replace(1, np.nan)) # 會返回一個新的series,也可以使用字典的方式{1: np.nan}
'''
0 0.0
1 NaN
2 2.0
3 3.0
4 4.0
5 5.0
6 6.0
7 7.0
8 8.0
9 9.0
dtype: float64
'''
# 還可以采用列表的方式,把多個元素個replace掉
print(s1.replace([1, 2, 3], [10, 20, 30]))
'''
0 0
1 10
2 20
3 30
4 4
5 5
6 6
7 7
8 8
9 9
dtype: int64
'''
map可以做一個映射,對於操作大型的dataframe來說就非常方便了,而且也不容易出錯。replace的作用是替換,這個很好理解。
import numpy as np
import pandas as pd
from pandas import Series, DataFrame
# create a dataframe
df1 = DataFrame({'城市':['北京', '上海', '廣州'], '人口':[1000, 2000, 1500]})
print(df1)
# 添加一列
# df1['GDP'] = Series([1000, 3000, 2000])
# print(df1)
'''
人口 城市 GDP
0 1000 北京 1000
1 2000 上海 3000
2 1500 廣州 2000
'''
dfp_map = {'北京':1000, '上海':2000, '廣州':3000}
df1['GDP'] = df1['城市'].map(dfp_map)
print(df1)
'''
人口 城市 GDP
0 1000 北京 1000
1 2000 上海 2000
2 1500 廣州 3000
總結:
使用map還是比創建series有優勢的,使用map就可以不關心dataframe的index,
只需要關注對應的城市即可。
注意下面的實驗
'''
# 再做一個實驗,添加一個index
df2 = DataFrame({'城市':['北京', '上海', '廣州'], '人口':[1000, 2000, 1500]}, index=['A', 'B', 'C'])
print(df2)
'''
人口 城市
A 1000 北京
B 2000 上海
C 1500 廣州
'''
df2['GDP'] = Series([1000, 2000, 3000])
print(df2)
'''
人口 城市 GDP
A 1000 北京 NaN
B 2000 上海 NaN
C 1500 廣州 NaN
可以看到答案是nan,這是為什么呢?因為 Series([1000, 2000, 3000])的索引默認是0,1,……
所以就出現了問題。
解決方法是:必須要給series添加指定的索引。
'''
# replace in series
s1 = Series(np.arange(10))
print(s1)
'''
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
dtype: int64
'''
print(s1.replace(1, np.nan)) # 會返回一個新的series,也可以使用字典的方式{1: np.nan}
'''
0 0.0
1 NaN
2 2.0
3 3.0
4 4.0
5 5.0
6 6.0
7 7.0
8 8.0
9 9.0
dtype: float64
'''
# 還可以采用列表的方式,把多個元素個replace掉
print(s1.replace([1, 2, 3], [10, 20, 30]))
'''
0 0
1 10
2 20
3 30
4 4
5 5
6 6
7 7
8 8
9 9
dtype: int64
'''