我想将pandas dataframe
保存为二进制格式,以便在c++
中读取它
我尝试了这样的tobytes
方法:
In [2]: df = pd.DataFrame(np.reshape(range(25), (5,5)))
In [3]: df[0]=101.
In [4]: df['ticker'] ='nick'
In [5]: a = df.to_numpy()
In [6]: a
Out[6]:
array([[101.0, 1, 2, 3, 4, 'nick'],
[101.0, 6, 7, 8, 9, 'nick'],
[101.0, 11, 12, 13, 14, 'nick'],
[101.0, 16, 17, 18, 19, 'nick'],
[101.0, 21, 22, 23, 24, 'nick']], dtype=object)
In [7]: a.tobytes()
Out[7]: b'0\x0f@\xfc\xf9\x7f\x00\x000iME\xfa\x7f\x00\x00PiME\xfa\x7f\x00\x00piME\xfa\x7f\x00\x00\x90iME\xfa\x7f\x00\x00pI\xe9A\xfa\x7f\x00\x00\xf0\r@\xfc\xf9\x7f\x00\x00\xd0iME\xfa\x7f\x00\x00\xf0iME\xfa\x7f\x00\x00\x10jME\xfa\x7f\x00\x000jME\xfa\x7f\x00\x00pI\xe9A\xfa\x7f\x00\x00p\x1dR\xf7\xf9\x7f\x00\x00pjME\xfa\x7f\x00\x00\x90jME\xfa\x7f\x00\x00\xb0jME\xfa\x7f\x00\x00\xd0jME\xfa\x7f\x00\x00pI\xe9A\xfa\x7f\x00\x00p\x8f\xf8A\xfa\x7f\x00\x00\x10kME\xfa\x7f\x00\x000kME\xfa\x7f\x00\x00PkME\xfa\x7f\x00\x00pkME\xfa\x7f\x00\x00pI\xe9A\xfa\x7f\x00\x00\xb0\x14\xf8\xf7\xf9\x7f\x00\x00\xb0kME\xfa\x7f\x00\x00\xd0kME\xfa\x7f\x00\x00\xf0kME\xfa\x7f\x00\x00\x10lME\xfa\x7f\x00\x00pI\xe9A\xfa\x7f\x00\x00'
### !!!! what's here? both in binary or hex format, it can't be interpreted
In [8]: with open('a.bin', 'wb') as f:
...: f.write(a.tobytes())
<>我不能用C++来读,这里是我的C++阅读代码:#include <fstream>
#include <iostream>
using namespace std;
int main() {
std::fstream f("a.bin", std::ios::binary | std::ios::in);
if (!f.is_open()) { printf("open failed"); exit(1); }
char buff[1024];
f.read(buff, 1024);
cout << *(float*)(buff + 0*sizeof(float)) << endl; // mess code, should be 101
}
我不能理解字节输出,它似乎不是二进制或十六进制格式的101,你能帮我吗? 托比特斯做了什么
您有一个
object
数组,其中包含一组指向Python对象的指针。您的tobytes
输出由一组原始指针组成。数据从C++中完全不可恢复,因为没有指向数据的任何数据被保存。相关问题 更多 >
编程相关推荐