如何使用pybind11返回DataFrame



我正在使用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.

最新更新