-1

我有一个大型数据集,其中嵌入了当前存储为 pickle 文件的列表/字典中的 unix 纪元日期。我尝试使用 reticulate 包 vis py_load_object() 函数将泡菜文件导入 R。除了 unix 纪元日期(以毫秒为单位)之外,其他一切似乎都很好。

我得到了非常奇怪的整数转换。例如,694137600000 的纪元日期在 R 中被读取为 -1647101952。我想知道是否有解释和解决方法。

谢谢!

4

2 回答 2

1

如果没有最小的可重现示例,很难帮助您,但这里有一些想法:

  • 您可以取消腌制并将文件转换为pandasPython 脚本中的数据框。source_python函数 from会将其reticulate 作为 R 数据框导入。有关类型转换的更多信息,请参阅文档: rstudio/reticulate
  • 始终可以将文件取消腌制并导出为通用格式,例如csv使用 Python,然后将其导入 R。这样,您可以绕过reticulate,这并不总是一个有效的选择。

另请注意,在处理 R 中的 13 位数字时,您可能需要一些帮助。您可能bit64会对此包感兴趣。

于 2018-08-04T06:25:02.070 回答
0

问题是这些值被 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数据框 - 除非日期/时间是第一列,(请参阅此处了解原因)。

于 2018-08-04T06:43:32.330 回答