我正在尝试编写一个程序,将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文件转换为非常特定的二进制文件输出。它必须以大端字节序格式编写,并带有各种数据类型,包括无符号整数和浮点数。我...
原来numpy数组只能有一个数据类型,所以当我执行.to_numpy(datatype)时,它试图将每个数据类型应用于每个值-因此是4x4数组。然后,它正在写那个4x4数组,导致了额外的字节。