数据转换函数对比: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['公司']获取
三、 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
网友评论