20

我正在使用 C/C++ 从遗留后端系统中提取大量数据,并使用distutils. 在Python中获取数据后,我将其放入一个pandas DataFrame对象中进行数据分析。现在我想走得更快,并想避免第二步。

是否有用于 Pandas 的 C/C++ API 在 C/C++ 中创建 DataFrame,添加我的 C/C++ 数据并将其传递给 Python?我正在考虑类似于 numpy C API 的东西。

我已经考虑在 C 中创建 numpy 数组对象作为一种解决方法,但我大量使用时间序列数据,并且也希望拥有 TimeSeries 和 date_range 对象。

4

3 回答 3

18

现在有一个 C++ 库,在接口和功能方面与 Pandas 包相当。见Linkedin这篇文章“ https://www.linkedin.com/pulse/pythons-pandas-c-update-hossein-moein/ ” 开源代码在“ https://github.com/hosseinmoein/DataFrame

于 2017-10-28T19:07:45.663 回答
13

我正在处理类似的问题,使用 C API 从 Pandas 不支持的格式加载数据。我找到了两种方法来解决这个问题,希望有人会发现它们有用。

  • Pandas 数据框是纯 Python 类,因此不容易从 C/C++ 构建,但各个列的底层数据存储(参见类系列源)是 numpy 一维数组。Numpy 有一个不错的C API,您可以从 C 构造 numpy 数组,然后将其传递给您的 Python 代码。

  • 第二种解决方案是为 Pandas 编写自己的输入模块。这并不像听起来那么工作,而且可能非常有效。Pandas 低级 IO 模块是用Cython(一种介于 Python 和 C 之间的特殊语言,编译为 C)编写的,例如parser.pyx示例。虽然那个特定的解析器非常复杂,但您的解析器基本上只会调用您的遗留 C 代码。

于 2016-03-17T09:47:18.803 回答
9

所有 pandas 类(TimeSeries、DataFrame、DatetimeIndex 等)都有纯 Python 定义,因此没有 C API。您最好将 C 中的 numpy ndarrays 传递给您的 Python 代码,并让您的 Python 代码从中构造 pandas 对象。

如有必要,您可以使用PyObject_CallFunctionetc. 来调用 pandas 构造函数,但您必须注意从模块导入中访问名称并检查错误。

于 2012-07-23T10:31:10.300 回答