数据转换函数对比: map、apply、applymap
实例:将股票代码英文转换成中文名字
Series.map(dict) or Series.map(function)均可
- import pandas as pd
- stocks=pd.read_excel('./datas/stocks/互联网公司股票.xlsx')
- stocks.head()
stocks['公司'].unique()
- #公司股票代码到中文的映射,注意这里要小写
- dict_company_names={
- 'bidu':'百度',
- 'baba':'阿里巴巴',
- 'iq':'爱奇艺',
- 'jd':'京东'
- }
方法1:Series.map(dict) ----在map函数中传进去一个字典只用于Series
- # stocks['公司'].str.lower()---将公司中的所有字母转换为小写字母
- # .map(dict_company_names)--把公司中所有对应的列转换为其对应的中文字母
- stocks['公司中文1']=stocks['公司'].str.lower().map(dict_company_names)
- stocks.head()
function的参数是Series的每个元素的值
- stocks['公司中文2']=stocks['公司'].map(lambda x:dict_company_names[x.lower()])
- stocks.head()
Series.apply(function),函数的参数是每个值.
DataFrame.apply(function),函数的参数是Series
Series.apply(function)
function的参数是Series的每个值
- stocks['公司中文3']=stocks['公司'].apply(
- lambda x:dict_company_names[x.lower()]
- )
- stocks.head()
function的参数是对应轴的Series
- stocks['公司中文4']=stocks.apply(
- lambda x:dict_company_names[x['公司'].lower()],
- axis=1
- )
- stocks.head()
注意这个代码:
- 1、apply是在stocks这个DataFrame上调用;
-
- 2、lambda x的x是一个Series,因为指定了axis=1所以Seires的key是列名,可以用x[公司"]获取
- sub_df=stocks[['收盘','开盘','高','低','交易量']]
- sub_df.head()
- #将这些数字取整数,应用于所有元素
- sub_df.applymap(lambda x:int(x))
- #直接修改原df的这几列
- stocks.loc[:,['收盘','开盘','高','低','交易量']]=sub_df.applymap(lambda x:int(x))
- stocks.head()