pandas / numpy NaN是如何用二进制格式表示的

时间:2015-02-19 00:51:11

标签: python-3.x numpy pandas

我试图在二进制文件中编写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

1 个答案:

答案 0 :(得分:2)

使用IEEE-754表示,其定义了如何定义和处理nan。例如,请参阅http://en.wikipedia.org/wiki/IEEE_floating_pointhttp://en.wikipedia.org/wiki/NaN