繁体   English   中英

Integer 数据类型的缺失值更改为 python 中的 object

[英]Integer datatypes with missing values changes to object in python using pyreadr package, after importing data from RData file

我想使用“.RData”文件中的数据执行一些 python 函数。 我正在使用'pyreadr' python package 。

这是 R 代码示例

library(data.table)

# Example 
data <- data.table(x_num=c(1,1.5,2),
                   x_int=c(1,2,3))
data$x_int <- as.integer(data$x_int) # Making sure the data is in integer type


data_missing <- data.table(x_num=c(1.5,2,NA,5,6),
                   x_int=c(1,2,3,NA,5))
data_missing$x_int <- as.integer(data_missing$x_int) # Making sure the data is in integer type

# checking the classes
sapply(data,class)
sapply(data_missing,class)

# Storing the data in RData file 
save(data, file = "test_data.RData")
save(data_missing, file = "test_missing_data.RData")

我将它存储在不同文件中的原因是因为“test_data.RData”已成功加载到 python,但是“test_missing_data.RData”正在将带有 NA 数据的值转换为 object 而不是 Z157DB7DF530023572E5815

这是 Python 代码

# Working example
import pyreadr
result=pyreadr.read_r('test_data.RData')
data=result['data']
data.dtypes
# Output
# x_num    float64
# x_int      int32
# Example where NA values are converted to object datatype
import pyreadr
result=pyreadr.read_r('test_missing_data.RData') # Error 

data=result['data_missing']
data.dtypes
# Output
# x_num    float64
# x_int     object

没有错误消息,但是即使缺少值或 NA 值,我也需要将数据类型保留在 integer 中。

感谢您的时间和帮助。

目前,您所描述的是 package 的正确行为。 This is because in older versions of pandas, a numpy integer array was used and those do not allow to set a numpy nan value, which is a float, and was the only available missing value representation. 因此,列类型必须设置为 object 才能处理两种不同类型的数据:integer 和浮点数。

最近,pandas 引入了可以为空的 integer 列类型。

当写回 ZE1E1D3D40573123D6ZEE2 时,Pyreadr 会将这些 object 列转换回 R integer。

将整数写入 R 时,您必须确保这些是 32 位整数或更低。 这是因为在 R 中所有整数都是 32 位的,但在 pandas 中,您可以有 64、32、16 或 8 位整数。 64 位整数不能转换为 32 位整数,因为存在溢出的风险。 如果您设置自己的 integer 列,最好将它们转换为“Int32”类型(注意大写 I),pyreadr 会将它们正确转换为 R 整数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM