我有一个大型数据集,其中嵌入了当前存储为 pickle 文件的列表/字典中的 unix 纪元日期。我尝试使用 reticulate 包 vis py_load_object() 函数将泡菜文件导入 R。除了 unix 纪元日期(以毫秒为单位)之外,其他一切似乎都很好。
我得到了非常奇怪的整数转换。例如,694137600000 的纪元日期在 R 中被读取为 -1647101952。我想知道是否有解释和解决方法。
谢谢!
我有一个大型数据集,其中嵌入了当前存储为 pickle 文件的列表/字典中的 unix 纪元日期。我尝试使用 reticulate 包 vis py_load_object() 函数将泡菜文件导入 R。除了 unix 纪元日期(以毫秒为单位)之外,其他一切似乎都很好。
我得到了非常奇怪的整数转换。例如,694137600000 的纪元日期在 R 中被读取为 -1647101952。我想知道是否有解释和解决方法。
谢谢!
如果没有最小的可重现示例,很难帮助您,但这里有一些想法:
pandas
Python 脚本中的数据框。source_python
函数 from会将其reticulate
作为 R 数据框导入。有关类型转换的更多信息,请参阅文档:
rstudio/reticulate csv
使用 Python,然后将其导入 R。这样,您可以绕过reticulate
,这并不总是一个有效的选择。另请注意,在处理 R 中的 13 位数字时,您可能需要一些帮助。您可能bit64
会对此包感兴趣。
问题是这些值被 reticulate 视为 32 位整数 - 您可以在下面的 python 片段中看到问题:
In [1]: v = 694137600000
In [2]: v.bit_length()
Out[2]: 40
In [3]: import ctypes
In [4]: ctypes.c_int(v)
Out[4]: c_long(-1647101952)
In [5]: _.value
Out[5]: -1647101952
In [6]: ctypes.c_int64(v)
Out[6]: c_longlong(694137600000)
In [7]: ctypes.c_int32(v)
Out[7]: c_long(-1647101952)
最简单的解决方法之一是,在 python 中,解压缩文件并保存为 .csv 文件,但您应该发现,如果将腌制数据转换为 pandas 数据框,然后从 R 访问它,它将被转换为 R数据框 - 除非日期/时间是第一列,(请参阅此处了解原因)。