【pandas 数据类型转换 :astype()和to_numeric()用法】

在处理数据时,可能会遇到数据类型不一致的问题。例如,通过爬虫采集到的数据都是整型的数据,在使用数据时希望保留两位小数点,这时就需要将数据的类型转换成浮点型。

创建Pandas数据对象时,如果没有明确地指出数据的类型,则可以根据传入的数据推断出来,并且通过dtypes属性进行查看。

df = pd.DataFrame({'A':['5', '6', '7'], 'B':['3', '2', '1']})

# 查看数据的类型
df.dtypes
#   A     object
#   B     object
#   dtype: object

还可以在创建Pandas对象时明确地指定数据的类型,即在使用构造方法中的dtype参数指定数据的类型。

df = pd.DataFrame({'A': ['5', '6', '7'],
  		           'B': ['3', '2', '1']},dtype='int')
df.dtypes
#    A    int32
#	 B    int32
#  	dtype: object

通过astype()方法可以强制转换数据的类型。

astype(dtype,copy = True,errors ='raise'** kwargs )

dtype:表示数据的类型。
errors:错误采取的处理方式,可以取值为raiseignore。其中,raise表示允许引发异常,ignore表示抑制异常,默认为raise

astype()方法存在着一些局限性,只要待转换的数据中存在非数字以外的字符,在使用astype()方法进行类型转换时就会出现错误,而to_numeric()函数的出现正好解决了这个问题。

to_numeric()函数可以将传入的参数转换为数值类型

pandas.to_numeric(arg, errors='raise', downcast=None)
  • arg:表示要转换的数据,可以是list、tuple、Series
  • errors:表示错误采取的处理方式。
  • downcast:指定转换的类型,默认返回float64或int64
参数描述
argscalar, list, tuple, 1-d array, or Series
errors{‘ignore’, ‘raise’, ‘coerce’}, default ‘raise’
downcast{‘integer’, ‘signed’, ‘unsigned’, ‘float’}
import pandas as pd
import numpy as np
s = pd.Series(['apple', '1.0', '2','2019-01-02',1, False,None,pd.Timestamp('2018-01-05')])

# to_numeric是在object,时间格式中间做转换,然后再使用astype做numeric类型的内部转换
pd.to_numeric(s, errors='raise') # 遇到非数字字符串类型报错,bool类型报错,时间类型转换为int
pd.to_numeric(s, errors='ignore') # 只对数字字符串转换,其他类型一律不转换,包含时间类型
pd.to_numeric(s, errors='coerce')  # 将时间字符串和bool类型转换为数字,其他均转换为NaN

# downcast 可以进一步转化为int或者float
pd.to_numeric(s) # 默认float64类型
pd.to_numeric(s, downcast='signed') # 转换为整型

# astype中的error没有`coerce`选项,所以只适合`numeric`内部类型的转换,比如将int32转换为int64,int32转换为float32
# 而不适合在object,时间格式之间做转换,
s.astype('int32',errors='raise')
s.astype('int32',errors='ignore')  # 对object无效,astype只能对numeric类型生效

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值