在处理数据时,可能会遇到数据类型不一致的问题。例如,通过爬虫采集到的数据都是整型的数据,在使用数据时希望保留两位小数点,这时就需要将数据的类型转换成浮点型。针对这种问题,既可以创建Pandas对象时明确指定数据的类型,也可以使用astype()方法和to_numeric()函数进行转换,具体如下。
一、通过astype()方法强制转换数据的类型
astype(dtype,copy=True,errors=‘raises’, kwargs)**
上述方法中的部分参数表示的含义如下:
1. dtype:表示数据的类型。
2. copy:是否建立副本,默认为True。
3. errors:错误采取的处理方式,可以取值为raise或ignore,默认为raise。其中raise表示允许引发异常,ingore表示抑制异常。
import pandas as pd #创建DataFrame对象
jk=pd.DataFrame({'A':['1','1.2','4.2']
,'B':['-9','70','88']
,'C':['x','5.0','0']})
jk
jk.dtypes
jk['B'].astype(dtype='int') #转换为int
jk['A'].astype(dtype='float')
jk['C'].astype(dtype='int',errors='ignore')
二、通过to_numeric()函数转换数据类型
astype()方法虽然可以转换数据的类型,但是它存在着一些局限性,只要待转换的数据中存在数字以外的字符,在使用astype()方法进行类型转换时就会出现错误,而to_numeric()函数可以解决这个问题。
to_numeric()函数可以将传入的参数转换为数值类型,语法如下:
pandas.to_numeric(arg,errors=‘raise’,downcast=None)
上述函数中常用参数表示的含义如下:
arg:表示要转换的数据,可以是list,tuple,Series。
errors:错误采取的处理方式,参数有:“raise”,“coerce”,“ignore”.
(1)raise:无效的解析将引发异常
(2)coerce:无效的解析设置为NaN //这个在astype里面没有
(3)ignore:无效的解析将返回输入
import pandas as pd #to_numeric转换的数据是list,tuple,Series,不能直接对DataFrame转换
ser_obj=pd.Series(['1','4.2','1.2'])
ser_obj
pd.to_numeric(ser_obj)
import pandas as pd #
jk=pd.Series(['1','4.2','k'])
jk
pd.to_numeric(jk,errors='coerce')
由于to_numeric()不能直接对DataFrame直接使用,所以可以使用apply方法,让它对全体DataFrame生效
import pandas as pd
jk=pd.DataFrame({'A':['1','1.2','4.2']
,'B':['-9','70','88']
,'C':['x','5.0','0']})
jk
jkp=jk.apply(pd.to_numeric,errors='coerce')
jkp
作者:KJ.JK
本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。
文章对你有所帮助的话,欢迎给个赞或者 star 呀,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习呀。