我如何将熊猫数据帧写入具有多种数据类型特定格式的二进制文件?

问题描述 投票:1回答:1

我正在尝试编写一个程序,将CSV文件转换为非常特定的二进制文件输出。它必须以大端字节序格式编写,并带有各种数据类型,包括无符号整数和浮点数。我已成功将CSV导入到熊猫数据框。

这里是示例数据:

val1,val2,val3,val4
1234567890,10000,1,0.839792631

这是我正在使用的代码:

import numpy as np
import pandas as pd

inputfilename = r"test_csv.csv"

df = pd.read_csv(inputfilename)

datatype = np.dtype([
    ('val1', '>u4'),
    ('val2', '>u2'),
    ('val3', 'u1'),
    ('val4', '>f4')])

data = df.to_numpy(dtype=datatype) 

outputfilename = r"output_py_1.dat"
fileobj = open(outputfilename, mode='wb')
data.tofile(fileobj)
fileobj.close()

我已经编写了代码在Matlab中执行相同的操作,并在十六进制编辑器中对其进行了验证。正确的输出是:

49 96 02 D2 27 10 01 3F 56 FC A6 00

但是,Python输出许多多余的字节并重复一些字节,我不明白为什么。

49 96 02 D2 02 D2 D2 4E 93 2C 06 00 00 27 10 27 10 10 46 1C 40 00 00 00 00 01 00 01 01 3F 80 00 00 00 00 00 00 00 00 00 3F 56 FC A6 F2

有什么办法可以使输出正确?

我还认为问题可能与转换为numpy有关,因为数据输出看起来像这样,带有大量额外的数字(我什至不知道那些数字来自哪里):] >

array([[(1234567890,   722, 210, 1.234568e+09),
    (     10000, 10000,  16, 1.000000e+04),
    (         1,     1,   1, 1.000000e+00),
    (         0,     0,   0, 8.397926e-01)]],
  dtype=[('val1', '>u4'), ('val2', '>u2'), ('val3', 'u1'), ('val4', '>f4')])

我正在尝试编写一个程序,将CSV文件转换为非常特定的二进制文件输出。它必须以大端字节序格式编写,并带有各种数据类型,包括无符号整数和浮点数。我...

python pandas binaryfiles
1个回答
0
投票

原来numpy数组只能有一个数据类型,所以当我执行.to_numpy(datatype)时,它试图将每个数据类型应用于每个值-因此是4x4数组。然后,它正在写那个4x4数组,导致了额外的字节。

© www.soinside.com 2019 - 2024. All rights reserved.