我正在使用pybind11和Modern C++编写一个Python模块。
如何将数据帧从C++返回到Python?
返回一个Apache Arrow表是可能的,该表可以用一行Python转换为Python DataFrame。
对于使用以下内容的现有Python库的示例:
- 请参阅Turbodbc文档
- 请参阅Turbodbc-github repo和源代码,其中包含使用pybind11将表从C++传递到Python的方法
其他链接
- 如何在python中的PyArrow和C中的Arrow之间进行接口时将PyArrow表转换为Arrow表++
有时,为了日志记录的目的,将DataFrame从PyBind11/C++快速"虚拟"传输到Python是很有用的。我们不想要速度,我们想要易用性。
在C++中构造一个表示.csv文件的字符串,返回该字符串,然后将其转换为Python端的DataFrame:
from io import StringIO
logCsv = 'A,Bn2.3,4.5n' # This string could be generated in PyBind11/C++.
LOGDATA = StringIO(logCsv)
df = pd.read_csv(LOGDATA, sep=",")
df
输出:
A B
0 2.3 4.5
一旦我们将这些数据保存在DataFrame中,我们就可以将其保存为任何格式,包括Excel和Parquet。一旦数据在Excel中,调试就变得更容易了。
如果单元格是制表符分隔的,那么数据可以直接从日志粘贴到Excel中,它将正确地划分为多个单元格。
from io import StringIO
logCsv = 'AtBn'
logCsv += '2.3t4.5n' # This string could be generated in PyBind11/C++.
LOGDATA = StringIO(logCsv)
df = pd.read_csv(LOGDATA, sep="t")
print(df)
# Can now paste output straight into Excel.