我试图在二进制文件中编写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.pack
和struct.unpack
是否处理NaN
?或者,是否使用了float64
的任何特定极值?
我正在使用Python 3.4
答案 0 :(得分:2)
使用IEEE-754表示,其定义了如何定义和处理nan。例如,请参阅http://en.wikipedia.org/wiki/IEEE_floating_point和http://en.wikipedia.org/wiki/NaN