pandas / numpy NaN 如何以二进制格式表示

how is pandas / numpy NaN represented in binary format

我试图在二进制文件中写入一个 Pandas 数据帧。数据框在其许多列中包含相当多的 NaN 值(假设数据框只有 float64 列。这是编写它的代码片段:

import pandas as pd
...
bfile = open(r'...\myfilename.bin','wb')
for i in range(df.shape[1]):
   bfile.write(struct.pack('%id' % df.shape[0], *df[:,i]))
bfile.close()

这是回读它的代码片段(一次读一列并执行 concat 操作):

bfile = open(r'...\myfilename.bin', 'rb') 
for i in range(df.shape[1]):
  if i == 0:
    df1=pd.DataFrame(list(struct.unpack('%id' % df.shape[0], bfile.read(8*df.shape[0])))
  else:
    df1=pd.concat([df1, pd.DataFrame(list(struct.unpack('%id' % df.shape[0], bfile.read(8*df.shape[0]))), axis=1)
bfile.close()

上面的两个过程 NaN 处理得很好。我检查了原始数据帧和从二进制文件重建的数据帧,没有错误。

我打算将这些二进制文件重新用于其他编程语言(例如 R、F#)。

当我们尝试以二进制格式编写时,有人知道 Pandas NaN(或 Numpy NaN)是如何编写的吗?

struct.packstruct.unpack 是否处理 NaN?或者,是否使用了 float64 的任何特定极值?

我正在使用 Python 3.4

使用了 IEEE-754 表示法,它定义了 nan 的定义和处理方式。例如,参见 http://en.wikipedia.org/wiki/IEEE_floating_point, and http://en.wikipedia.org/wiki/NaN