怎樣使用Pandas的map和apply函數(shù)?
數(shù)據(jù)轉(zhuǎn)換函數(shù)對比:map、apply、applymap:
map:只用于Series,實現(xiàn)每個值->值的映射;
apply:用于Series實現(xiàn)每個值的處理,用于Dataframe實現(xiàn)某個軸的Series的處理;
applymap:只能用于DataFrame,用于處理該DataFrame的每個元素;
1. map用于Series值的轉(zhuǎn)換
實例:將股票代碼英文轉(zhuǎn)換成中文名字
Series.map(dict) or Series.map(function)均可
import pandas as pd
stocks = pd.read_excel('./datas/stocks/互聯(lián)網(wǎng)公司股票.xlsx')
stocks.head()

stocks["公司"].unique()
array(['BIDU', 'BABA', 'IQ', 'JD'], dtype=object)
# 公司股票代碼到中文的映射,注意這里是小寫
dict_company_names = {
"bidu": "百度",
"baba": "阿里巴巴",
"iq": "愛奇藝",
"jd": "京東"
}
方法1:Series.map(dict)
stocks["公司中文1"] = stocks["公司"].str.lower().map(dict_company_names)
stocks.head()

方法2:Series.map(function)
function的參數(shù)是Series的每個元素的值
stocks["公司中文2"] = stocks["公司"].map(lambda x : dict_company_names[x.lower()])
stocks.head()

2. apply用于Series和DataFrame的轉(zhuǎn)換
Series.apply(function), 函數(shù)的參數(shù)是每個值
DataFrame.apply(function), 函數(shù)的參數(shù)是Series
Series.apply(function)
function的參數(shù)是Series的每個值
stocks["公司中文3"] = stocks["公司"].apply(
lambda x : dict_company_names[x.lower()])
stocks.head()

DataFrame.apply(function)
function的參數(shù)是對應軸的Series
stocks["公司中文4"] = stocks.apply(
lambda x : dict_company_names[x["公司"].lower()],
axis=1)
注意這個代碼:
1、apply是在stocks這個DataFrame上調(diào)用;
2、lambda x的x是一個Series,因為指定了axis=1所以Seires的key是列名,可以用x[‘公司’]獲取
stocks.head()

3. applymap用于DataFrame所有值的轉(zhuǎn)換
sub_df = stocks[['收盤', '開盤', '高', '低', '交易量']]
sub_df.head()

# 將這些數(shù)字取整數(shù),應用于所有元素
sub_df.applymap(lambda x : int(x))

# 直接修改原df的這幾列
stocks.loc[:, ['收盤', '開盤', '高', '低', '交易量']] = sub_df.applymap(lambda x : int(x))
stocks.head()

評論
圖片
表情
