
18888889999
notice 网站公告
— 杏彩体育资讯 —
数据类型转换是在学校或培训的时候,最容易忽略的问题,却是在工作的时候最最最重要的一个问题,它是一切后续计算和处理的基础,很多人就迈不过数据类型转换的坎儿。
先来看一下Pandas、Numpy、Python各自支持的数据类型有哪些。Pandas支持的数据类型最为丰富。
接下来用一个案例来展示数据类型转换,案例数据已做脱敏处理。先展示一下原始数据:
import numpy as np
import pandas as pd
customer=pd.read_excel('D:\\\\Arya\\\\专栏客户分组_01.xlsx') #读取数据
print(customer.dtypes) #打印数据类型,重要!!!每次读取数据后都要先检查数据类型。
昵称 object
详细地址 object
付款笔数 int64
付款金额 object
最近下单时间 object
最后付款时间 object
dtype: object
字段:付款笔数
问题:付款金额的类型是object,是无法做加减运算的。
目标:将金额转换为数字类型。
分析:观察付款金额数据,实现转换需要两步。1.去掉货币符号¥3,999.00--->3,999.00;2.去掉千分位符3,999.00--->3999.00
实现:
def covert_currency(x): #1定义改变货币的函数
if x==0:
return 0
else:
return x.replace("¥","").replace(",","")
fj_str=customer['付款金额'].apply(lambda x:covert_currency(x)) #2
customer['付款金额']=pd.to_numeric(cust_str) #3
解释:上述代码就实现了货币金额转为数字的操作。现在来解释一下,为什么要用这样的方法,来实现转换。
一. pandas实现数据类型转换有三种基本方法:
(1)pandas不能够直接将货币转为数值型。
customer['付款金额']=customer['付款金额'].astype('float64') #会报错
ValueError: could not convert string to float: '¥749.00'
(2)即使能用astype()进行转换,也有时候效果不理想(神坑!!!)有一次笔者用astype处理20万左右数据,虽然执行成功实现了数据类型转换,但是数字错乱,具体的案例不上传了。所以astype函数直接被我拉进了黑名单!查询了一下原因,astype有效的情况有限,最好是数据列中的每一个单位都能简单的解释为数字,且数据列中的每一个单位都是数值类型且向字符串object类型转换。
2. 自定义函数
见本案例。
3. pandas提供的类型转换函数
pd.to_datetime
pd.to_timedelta
pd.to_numeric
pd.to_msgpack
pd.to_pickle
二. apply函数和lambda函数
pandas里面如果才有for来遍历循环的话,速度会狠狠狠慢的。使用apply函数来替代执行,速度则会非常快。
apply(func,axis='major',*args,**kwargs)
参数解释:
--->func : function函数
--->axis : 作用的轴
--->*args:arguments,表示将实参中按照位置传值,多出来的值都给args,且以元组的方式呈现
--->**kwargs : 表示形参中按照关键字传值,把多余的传值以字典的方式呈现
如果系统中,已经存在了一个函数func。现在需要传入参数值来运行,这个参数值需要按照位置进行传入,这时候就需要apply函数,apply()返回的值是fun()的返回值。apply()的本质就是按照位置传递参数的函数。
2. lambda
请看文章:
如有需求请您联系我们!
地址:海南省海口市58号
电话:18888889999
手机:海南省海口市58号
Copyright © 2012-2018 首页-杏彩体育中国官方网站 版权所有 ICP备案编:琼ICP备88889999号