咨询热线

18888889999

notice  网站公告

诚信为本:市场永远在变,诚信永远不变。
NEWS CENTER

杏彩体育资讯

service phone 18888889999

pd数据类型转换技巧--01金额转数字

发布时间:2023-08-08 14:11:53  点击量:
更多

数据类型转换是在学校或培训的时候,最容易忽略的问题,却是在工作的时候最最最重要的一个问题,它是一切后续计算和处理的基础,很多人就迈不过数据类型转换的坎儿。

先来看一下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实现数据类型转换有三种基本方法:

  • 使用astype()函数进行强制类型转换
  • 自定义函数进行数据类型转换
  • 使用Pandas提供的函数如to_numeric()、to_datetime()
  1. astype

(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函数

  1. apply

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号

平台注册入口