2012-07-23 5 views
4

C/C++를 사용하여 레거시 백엔드 시스템에서 대량 데이터를 추출하고이를 distutils을 사용하여 Python으로 옮깁니다. 파이썬에서 데이터를 얻은 후 데이터 분석을 위해 판다 DataFrame 객체에 넣었습니다. 이제 나는 더 빨리 가고 싶고 두 번째 단계를 피하고 싶습니다.python pandas 용 C/C++ API가 있습니까?

C/C++에서 DataFrame을 만들고 내 C/C++ 데이터를 추가하여 Python에 전달하는 팬더 용 C/C++ API가 있습니까? 나는 numpy C API와 비슷한 것을 생각하고있다.

나는 C로 해결 방법으로 numpy 배열 객체를 만들었지 만 timeseries 데이터를 많이 사용하고 있으며 TimeSeries와 date_range 객체도 사용하고 싶습니다.

답변

4

모든 팬더 클래스 (TimeSeries, DataFrame, DatetimeIndex 등)에는 순수 Python 정의가 있으므로 C API는 없습니다. C에서 파이썬 코드로 numpy ndarrays를 전달하고 파이썬 코드가 팬더 객체를 구성하게하는 것이 가장 좋을 것입니다.

필요한 경우 PyObject_CallFunction 등을 사용하여 팬더 생성자를 호출 할 수 있지만 모듈 가져 오기에서 이름에 액세스하고 오류를 확인해야합니다.

+0

감사의 말씀 ecatmur! ndarrys 시도해 줄거야 ... – THM

4

나는 C API로 팬더가 지원하지 않는 형식의 데이터를로드하는 비슷한 문제를 다루고 있습니다. 이 문제를 해결할 수있는 두 가지 방법을 찾았습니다. 누군가가 유용하다고 생각하길 바랍니다.

  • 팬더 데이터 프레임 순수한 파이썬 클래스이므로, 이들은 C/C++로 구성하는 것이 용이하지 않지만 개별 열 (see class Series source)의 내부 데이터 저장 NumPy와 1 차원 배열이다. Numpy는 멋진 C API을 가지고 있으며, C에서 numpy 배열을 만들고 Python 코드에 넘겨 줄 수 있습니다.

  • 두 번째 해결 방법은 팬더 용 입력 모듈을 작성하는 것입니다. 이것은 소리가 나는 것처럼 많은 작업이 아니며 매우 효율적일 수 있습니다. Pandas 저수준 IO 모듈은 Cython (C로 컴파일 된 Python과 C 사이의 특수 언어)로 작성됩니다 (예 : 예를 들어 parser.pyx 그 파서가 상당히 복잡하지만, 기본적으로 당신의 레거시 C 코드를 호출 할 것입니다.

관련 문제