大多数情况下,Pandas使用NumPy数组、Series或DataFrame里某列的数据类型。NumPy支持float、int、bool、timedelta[ns]、datetime64[ns],NumPy是不支持带时区信息的datetime。
Pandas与第三方支持库扩充了NumPy类型系统,接下来我们主要来介绍Pandas的内部扩展。
Pandas的扩展类型,如下表所示
Pandas用object存储字符串。
虽然,object数据类型能够存储任何对象,但我们要尽量避免这样做。
DataFrame的dtypes属性用起来很方便,以Series形式返回每列的数据类型。
要查看Series的数据类型,用dtype属性。
Pandas对象单列中含多种类型的数据时,该列的数据类型为可适配于各类数据的数据类型,通常为object。
DataFrame.dtypes.value_用于统计DataFrame里不同数据类型的列数。
多种数值型数据类型可以在DataFrame里共存。如果只传递一种数据类型,不论是通过dtype关键字直接传递,还是通过ndarray或Series传递,都会保存至DataFrame操作。此外,不同数值型数据类型不会并和。
默认值
整数的默认类型为int64,浮点数的默认类型为float64,这里的默认值与系统平台无关,不管是32位系统,还是64位系统都是一样的。下列代码返回的结果都是int64:
但是我们要注意,NumPy创建数组时,会根据系统选择类型。下列代码在32位系统上将返回int32。
向上转型
与其它类型合并时,用的是向上转型,指的是从现有类型转换为另一种类型,如int转换为float。
DataFrame.to_numpy()返回多个数据类型里用得最多的数据类型,这里指的是,输出结果的数据类型,适用于所有同构NumPy数组的数据类型。此处强制执行向上转型。
astype
astype()方法显式地把一种数据类型转换为另一种,默认操作为 复制数据,就算数据类型没有改变也会复制数据,copy=False改变默认操作模式。此外,astype无效时,会触发异常。
向上转型一般都遵循NumPy规则,操作中含有两种不同类型地数据时,返回更为通用地那种数据类型。
用astype把一列或多列转换为指定类型。
astype通过字典指定哪些列转换为哪些类型。
注意用astype与loc()为部分列转换指定类型时,会发生向上转型。
loc()尝试分配当前地数据类型,而[]则会从右方获取数据类型并进行覆盖。因此,下列代码会发生意料之外地结果:
对象转换
Pandas提供了多种函数可以把object从一种数据类型转换为另一种类型。这是因为,数据有时存储的是正确类型,但在保存时却存成了object类型,此时,用DataFrame.infer_objects()
与Series.infer_objects()方法即可把数据转换为正确的类型。
因为数据被转置,所以把原始列的数据类型改成了object,但使用infer_objects后就变正确了。
下列函数可以应用于一维数组与标量,执行硬转换,把对象转换为指定类型。
to_numeric()转换为数值型
to_datetime()转换为datetime对象
to_timedelta()转换为timedelta对象。
如需强制转换,则要加入error参数,指定Pandas怎样处理不能转换为预期类型或对象的数据。errors参数的默认值为False,指定的是在转换过程中,遇到任何问题都触发错误。设置为errors=‘coerce’时,pandas会忽略错误,强制把问题数据转换为pd.NaT(datetime与timedelta),或np.nan(数值型)。读取数据时,如果大部分要转换的数据是数值型或detetime,这种操作非常有用,但偶尔也会有非制式数据混合在一起,可能会导致展示数据缺失:
error参数还有第三个选项,error=’ignore’。转换数据时会忽略错误,直接输出问题数据:
执行转换操作时,to_numeric还有一个参数,downcast,即向下转型,可以把数值型转换为减少内存占用的数据类型:
上述方法仅能应用于一维数组、列表或标量;不能直接用于DataFrame等多维对象。不过,用apply(),可以快速为每列应用函数:
以上就是Pandas数据类型的所有内容了,希望对你有所帮助。
如果你想学习Python,但是找不到学习路径和资源,欢迎上指尖编程。
高效的在线交互式学Python!