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

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

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

map:只用于Series,实现每个值->值的映射;
apply:用于Series实现每个值的处理,用于Dataframe实现某个轴的Series的处理;
applymap:只能用于DataFrame,用于处理该DataFrame的每个元素;

import pandas as pd

stocks = pd.read_excel('./pandas/ant-learn-pandas/datas/stocks/互联网公司股票.xlsx')

print(stocks.head())

print(stocks["公司"].unique())

# 公司股票代码到中文的映射,注意这里是小写
dict_company_names = {
    "bidu": "百度",
    "baba": "阿里巴巴",
    "iq": "爱奇艺",
    "jd": "京东"
}

map用于Series值的转换

# map用于Series值的转换
# 方法一:Series.map(dict)
stocks["公司中文1"] = stocks["公司"].str.lower().map(dict_company_names)
print(stocks.head())

# 方法2:Series.map(function)
stocks["公司中文2"] = stocks["公司"].map(lambda x: dict_company_names[x.lower()])
print(stocks.head())

apply用于Series和DataFrame的转换

# apply用于Series和DataFrame的转换
# Series.apply(function),function的参数是Series的每个值
stocks["公司中文3"] = stocks["公司"].apply(lambda x: dict_company_names[x.lower()])
print(stocks.head())

# DataFrame.apply(function),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[‘公司’]获取

applymap用于DataFrame所有值的转换

# applymap用于DataFrame所有值的转换
sub_df = stocks[['收盘', '开盘', '高', '低', '交易量']]

# 将这些数字取整数,应用于所有元素
sub_df.applymap(lambda x : int(x))

# 直接修改原df的这几列
stocks.loc[:, ['收盘', '开盘', '高', '低', '交易量']] = sub_df.applymap(lambda x : int(x))

print(stocks.head())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值