美文网首页pandasPythonPython_数据分析_pandas
pandas的数据转换函数map、apply、applymap

pandas的数据转换函数map、apply、applymap

作者: 测试探索 | 来源:发表于2021-08-17 23:25 被阅读0次

    数据转换函数对比:map、apply、applymap:

    一、 map:只用于Series,实现每个值->值的映射;
    1、数据准备
    import pandas as pd
    stocks = pd.read_excel(r"D:\node\nd\Pandas_study\pandas_test\互联网公司股票.xlsx")
    print(stocks.head())
    print(stocks["公司"].unique())
    
    # 公司股票代码到中文的映射,注意这里是小写
    dict_company_names = {
        "bidu": "百度",
        "baba": "阿里巴巴",
        "iq": "爱奇艺",
        "jd": "京东"
    }
    
    image.png
    2、Series.map(dict)
    stocks["公司中文1"] = stocks["公司"].str.lower().map(dict_company_names)
    print(stocks.head())
    
    image.png
    3、Series.map(function)

    function的参数是Series的每个元素的值

    stocks["公司中文2"] = stocks["公司"].map(lambda x:dict_company_names[x.lower()])
    print(stocks.head())
    
    image.png
    二、 apply:用于Series实现每个值的处理,用于Dataframe实现某个轴的Series的处理;
    • Series.apply(function), 函数的参数是每个值
    stocks["公司中文3"] = stocks["公司"].apply(lambda x:dict_company_names[x.lower()])
    print(stocks.head())
    
    image.png
    • DataFrame.apply(function), 函数的参数是Series
    stocks["公司中文4"] = stocks.apply(lambda x:dict_company_names[x["公司"].lower()],axis = 1)
    print(stocks.head())
    

    注意这个代码:
    1、apply是在stocks这个DataFrame上调用;
    2、lambda x的x是一个Series,因为指定了axis=1所以Seires的key是列名,可以用x['公司']获取

    image.png
    三、 applymap:只能用于DataFrame,用于处理该DataFrame的每个元素;
    1、将多列取整
    sub_df = stocks[["收盘","开盘","高","低","交易量"]]
    print(sub_df.head())
    a = sub_df.applymap(lambda x :int(x))
    print(a)
    
    image.png
    2、直接修改原df的这几列
    stocks.loc[:,["收盘","开盘","高","低","交易量"]] = sub_df.applymap(lambda x :int(x))
    print(stocks.head())
    
    image.png

    相关文章

      网友评论

        本文标题:pandas的数据转换函数map、apply、applymap

        本文链接:https://www.haomeiwen.com/subject/trhwbltx.html