'''
数据转换函敌对比: map、apply.applymap:
1. map:只用于Series,实现每个值->值的映时;
2.apply: 用于Spries实现每个值的处理,用于Dataframe实现某个油的Series的处理;
3.applymap:只能用于DataFrame,用于处理该DataFrame的每个元素;'''
##1.map用于Series值的转换
import pandas as pd
fn ="D:\\python39\\pandas\\antlearnpandasmaster\\datas\\stocks\\互联网公司股票.xlsx"
stocks=pd.read_excel(fn)
st= stocks['公司'].unique()
print(st)
#公司股票代码到中文的映射,注意这里是小写
dict_company_names = {
'bidu':'百度',
'baba':'阿里巴巴',
'iq':'爱奇艺',
'jd':"京东"
}
#方法1:Series.map(dict)
stocks['公司中文1'] = stocks['公司'].str.lower().map(dict_company_names)#将公司名由大写改为小写,再由map()将英文映射转为中文
#方法2:Series.map(function)
#function的参数是Series的每个元素的值
stocks['公司中文2'] = stocks['公司'].map(lambda x:dict_company_names[x.lower()])
##2. apply用于Series和DataFrame的转换
# - Series.apply(function),函数的参数是每个值
stocks['公司中文3']= stocks['公司'].apply(lambda x:dict_company_names[x.lower()])
# - DataFrame.apply(function),函数的参数是Series
stocks['公司中文4'] = stocks.apply(lambda x:dict_company_names[x['公司'].lower()],axis =1)
'''
注意这个代码:
1. apply是在stocks这个DataFrame上调用:
2、lambda x的x是一个Series,因为指定了axis=1所以Seires的key是列名,可以用x[公司']获取'''
##3.applymap用于DataFrame所有值的转换
sub_df = stocks[['收盘','开盘','高','低','交易量']]#从大表中筛选出'收盘','开盘','高','低','交易量'这几列
#将这些数字取整,应用于所有的元素
sub_df1=sub_df.applymap(lambda x:int(x))#lambda x中的x是所有sub_df中的元素,不是某一列,也不是某一行
stocks.loc[:,['收盘','开盘','高','低','交易量']]=sub_df.applymap(lambda x:int(x))
print(stocks.head())
Pandas的数据转换函数map.apply、applymap
最新推荐文章于 2024-05-21 16:46:38 发布