
在pandas中,当数组包含none值并加载到dataframe列时,整数通常会被自动转换为浮点数(nan)。本文将介绍如何利用pandas 1.0及更高版本引入的pd.na和int64dtype,优雅地解决这一问题,从而在包含缺失值的同时保持列的整数类型,避免不必要的类型转换。
在处理包含缺失值的数值数据时,Pandas的默认行为可能会导致数据类型发生意外转换。具体来说,当一个数组中同时存在整数和None(或np.nan)时,Pandas为了保持列内数据类型的一致性,会将整个列转换为浮点数类型。这是因为传统的整数类型(如int64)无法表示缺失值,而浮点数类型可以表示NaN(Not a Number)。
考虑以下示例,一个包含None和整数的列表被加载到Pandas DataFrame中:
import pandas as pd the_array = [None, None, None, 101, 555, 756, 924, 485] df = pd.DataFrame(columns=['request']) df['request'] = the_array print(df) print(df.dtypes)
输出结果将显示:
request 0 NaN 1 NaN 2 NaN 3 101.0 4 555.0 5 756.0 6 924.0 7 485.0 request float64 dtype: object
可以看到,原始的None值被转换为NaN,而所有整数值都被转换为浮点数(例如,101变为101.0),列的数据类型也变成了float64。这在某些场景下可能不是期望的行为,特别是在需要严格保持整数类型或避免浮点数精度问题时。
为了解决上述问题,Pandas在1.0.0版本中引入了pd.NA这一实验性的缺失值指示符,并提供了支持可空数据类型的扩展Dtype。其中,pd.Int64Dtype(或其字符串别名'Int64')允许整数列包含缺失值,而无需将整个列转换为浮点数。
要实现包含None值的整数列而不进行浮点数转换,只需在创建DataFrame或Series时,通过dtype参数指定为'Int64'即可。
import pandas as pd
the_array = [None, None, None, 101, 555, 756, 924, 485]
# 在创建DataFrame时指定dtype为 'Int64'
df = pd.DataFrame(
data=the_array,
columns=["request"],
dtype="Int64", # 使用字符串别名指定可空整数Dtype
)
print(df)
print(df.dtypes)运行上述代码,你将得到以下输出:
request 0 <NA> 1 <NA> 2 <NA> 3 101 4 555 5 756 6 924 7 485 request Int64 dtype: object
从输出可以看出:
通过利用Pandas 1.0及更高版本提供的pd.NA和可空Dtype(如Int64Dtype),开发者可以更精确地处理包含缺失值的数值数据。这种方法避免了不必要的类型强制转换,使得DataFrame列能够保持其固有的整数类型,同时优雅地表示缺失值。在需要严格控制数据类型或进行精确数值计算的场景中,采用dtype='Int64'是一个推荐的最佳实践。
以上就是Pandas中处理含None值的整数数组:保持整数类型而非自动转换为浮点数的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号