20

C/C++ を使用して従来のバックエンド システムから大量のデータを抽出し、distutils. Python でデータを取得した後、データ分析のために pandas DataFrame オブジェクトに入れました。今、私はより速く進みたいと思っており、2 番目のステップを避けたいと考えています。

pandas が C/C++ で DataFrame を作成し、C/C++ データを追加して Python に渡すための C/C++ API はありますか? numpy C API に似たものを考えています。

回避策としてCでnumpy配列オブジェクトを作成することはすでに考えていますが、時系列データを多用しているため、TimeSeriesおよびdate_rangeオブジェクトも作成したいと考えています。

4

3 に答える 3

13

同様の問題に対処しており、C API を使用して Pandas でサポートされていない形式からデータをロードしています。私はこれに対処する 2 つの方法を見つけました。

  • Pandas データ フレームは純粋な Python クラスであるため、C/C++ から構築するのは簡単ではありませんが、個々の列(クラス Series ソースを参照)の基礎となるデータ ストレージは numpy 1D 配列です。Numpy には優れたC APIがあり、C から numpy 配列を作成して Python コードに渡すことができます。

  • 2 番目の解決策は、Pandas 用の独自の入力モジュールを作成することです。これは思ったほど多くの作業ではなく、非常に効率的かもしれません。Pandas の低レベル IO モジュールは、Cython (Python と C の間にある特別な言語で、C にコンパイルされたもの) で書かれています。例としてparser.pyxを参照してください。その特定のパーサーは非常に複雑ですが、基本的にはレガシー C コードを呼び出すだけです。

于 2016-03-17T09:47:18.803 に答える
9

すべてのパンダクラス(TimeSeries、DataFrame、DatetimeIndexなど)には純粋なPython定義があるため、CAPIはありません。numpy ndarraysをCからPythonコードに渡し、Pythonコードにそれらからpandasオブジェクトを構築させるのが最善かもしれません。

必要に応じてPyObject_CallFunction、etcを使用してpandasコンストラクターを呼び出すこともできますが、モジュールのインポートから名前にアクセスしてエラーをチェックする必要があります。

于 2012-07-23T10:31:10.300 に答える