pandas-05 map和replace操作

# 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
'''
原文地址:https://www.cnblogs.com/wenqiangit/p/11252725.html