Pandas to_numeric

本文详细介绍了Pandas库中数据类型转换的方法,包括使用to_numeric和astype函数进行对象到数值类型转换,以及如何处理转换过程中的错误。同时,深入探讨了缺失值的比较与处理技巧,如将NaN转换为特定值进行比较,以及如何用None或特定数值替换缺失值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参数描述
argscalar, list, tuple, 1-d array, or Series
errors{‘ignore’, ‘raise’, ‘coerce’}, default ‘raise’
downcast{‘integer’, ‘signed’, ‘unsigned’, ‘float’} , default None,指定转换的类型,默认返回float64int64

类型转换

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类型生效

缺失值处理

可以看到NaN类型在比较的是不相等的,原因是numpy.NaN是一种特殊的numpy.float64,如果想比较NaN是否相同,需要将其转换为该类型自己定义的特殊值(注意不能转换为None,None在Series里不能比较,而单独的值才能比较)

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')])

# 缺失值的比较 np.NaN == np.NaN返回是False
a = pd.to_numeric(s, errors='coerce')  # 将时间字符串和bool类型转换为数字,其他均转换为NaN
b = pd.to_numeric(s, errors='coerce')  # 将时间字符串和bool类型转换为数字,其他均转换为NaN
a==b

a[a==np.NaN] # 索引不到np.NaN
a[a.isnull()] = None # 能索引到,但是不能赋值为None
a[a.isna()] =None # 能索引到,但是不能赋值为None

a = a.where(a.notnull(), None) # 可以转换
b = b.where(b.notnull(), None)
a == b  # 但是Series里的None不能比较,返回False,这个坑太大了,在Python中None == None 返回是Ture

a[a.isnull()] = -1000 # 可以转换
a[a.isna()] = -1000 # 可以转换
a = a.where(a.notnull(), -10000) # 可以转换
b = b.where(b.notnull(), -10000) # 可以转换
a==b # 可以判断

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值