前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pandas每天一题-题目6:文本转数值

pandas每天一题-题目6:文本转数值

作者头像
咋咋
发布2021-09-01 14:21:28
7130
发布2021-09-01 14:21:28
举报
文章被收录于专栏:数据大宇宙

这是一个关于 pandas 从基础到进阶的练习题系列,来源于 github 上的 guipsamora/pandas_exercises 。这个项目从基础到进阶,可以检验你有多么了解 pandas。

我会挑选一些题目,并且提供比原题库更多的解决方法以及更详尽的解析

计划每天更新一期,希望各位小伙伴先自行思考,再查看答案。如果对你有帮助,记得转发推荐给你的好友!

上期文章:pandas每天一题-题目5:统计空值数量也有多种实现方式

后台回复"数据",可以下载本题数据集

如下数据:

数据描述:

  • 此数据是订单明细表。一个订单会包含很多明细项,表中每个样本(每一行)表示一个明细项
  • order_id 列存在重复
  • quantity 是明细项数量

需求:将价格列转成数值

下面是答案了


方式1

这是源项目的解决方式:

代码语言:javascript
复制
df = pd.read_csv('chipotle.tsv', sep='\t', dtype={'order_id': str})

dollarizer = lambda x: float(x[1:-1])
df.item_price = df.item_price.apply(dollarizer)
df
  • 行3:由于定义的函数,被用在行4的Serise(一列值)的apply方法中 ,因此参数 x是每个单元格的文本。
  • x[1:-1] 是 python 的切片,从第二个字符取到最后,实际作用就是去掉 $ 符号
  • 用 float 函数转成数值

点评:

  1. 这种方式不是 pandas 的风格

方式2

pandas 为文本列提供了切片方式:

代码语言:javascript
复制
df['item_price'].str[1:-1]
  • 返回的仍然是 Series

同样地,也有方法直接转类型:

代码语言:javascript
复制
df['item_price'] = df['item_price'].str[1:-1].astype(float)
df
  • astype(float) 即可转换类型

点评:

  1. 这种方式比起方式1更加简单直观。
  2. 缺点是需要记住 pandas 的方法,而且如果你希望加载数据的时候就做转换,那么方式1更加合适。

方式3

大部分从文件加载数据的方法都会提供一个转换的参数,让你可以在数据加载成 DataFrame 之前做类型转换:

代码语言:javascript
复制
df = pd.read_csv('chipotle.tsv',
                 sep='\t',
                 converters={'item_price': lambda x: float(x[1:-1])})
df
  • 行3:converters 参数提供字典,key 是列表或位置索引(比如这里可以设置4)都可以,对应一个处理函数。此时该列的每个值都被传入函数中处理

点评:

  1. 有时候我们必须在数据转成 DataFrame 之前做正确的处理,比如身份证号码,如果加载后已经变成科学计数法,那么你是没有机会转回正确的文本。这种解法就适合使用

推荐阅读:

  1. 震撼发布!自动生成pandas代码,python数据处理神器
  2. 打开你的思路!pandas居然可以存放函数与参数
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据大宇宙 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方式1
  • 方式2
  • 方式3
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档