1. 程式人生 > >pandas中的map和replace操作

pandas中的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 '''