• 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
    '''
    
  • 相关阅读:
    java 与打卡器通过udp协议交互
    java串口通信与打卡器交互
    hibernate 学习小结
    Log4J使用说明
    【秋招必备】Git常用命令(2021最新版)
    【秋招必备】Java集合面试题(2021最新版)
    工作这么多年!很多人竟然不知道线程池的创建方式有7种?
    【秋招必备】Java虚拟机面试题(2021最新版)
    【秋招必备】java异常面试题(2021最新版)
    好未来面试官:说说强引用、软引用、弱引用、幻象引用有什么区别?
  • 原文地址:https://www.cnblogs.com/wenqiangit/p/11252725.html
Copyright © 2020-2023  润新知