맨위로가기

Pandas

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

Pandas는 2008년 웨스 맥키니가 금융 데이터 분석을 위해 개발을 시작한 파이썬 프로그래밍 언어용 데이터 분석 라이브러리이다. Series와 DataFrame이라는 두 가지 주요 데이터 구조를 기반으로 하며, 데이터 조작, 데이터 정렬, 누락 데이터 처리, 데이터 재구성, 피벗, 병합 및 결합 등의 기능을 제공한다. 2015년에는 넘포커스의 재정 후원 프로젝트로 등록되었다. Pandas는 메모리 사용량과 병렬 처리 미흡에 대한 비판을 받기도 하며, 개발자는 이러한 문제를 해결하기 위해 아파치 애로우를 대안으로 제시했다.

더 읽어볼만한 페이지

  • 파이썬 라이브러리 - Tkinter
    Tkinter는 Tcl/Tk 툴킷을 파이썬 래퍼로 구현한 GUI 표준 라이브러리로서, 다양한 위젯과 배치 관리자를 제공하며 테마 Tk 기능을 통해 위젯 외관을 변경할 수 있도록 지원한다.
  • 파이썬 라이브러리 - SciPy
    SciPy는 NumPy 배열 구조를 기반으로 수치 적분, 선형 대수, 최적화, 통계 등 과학 및 공학 계산에 사용되는 다양한 기능을 제공하는 파이썬 과학 컴퓨팅 라이브러리이다.
  • 파이썬으로 작성된 자유 소프트웨어 - 캘리버
    캘리버는 다양한 전자책 파일 형식과 단말기를 지원하는 오픈소스 소프트웨어로, 편집, 변환, 메타데이터 관리, 라이브러리 검색, 온라인 콘텐츠 수집, 원격 액세스, 전자책 제작 등의 기능을 제공하며, 플러그인을 통해 DRM 제거도 가능하다.
  • 파이썬으로 작성된 자유 소프트웨어 - 클램윈
    클램윈은 ClamAV 엔진 기반의 오픈 소스 백신 소프트웨어로, 트로이 목마, 바이러스, 멀웨어 등 다양한 악성 위협 분석 자료를 제공하며 예약 검사, 수동 검사, 컨텍스트 메뉴 통합 등의 기능을 지원하지만 실시간 감시 기능은 제공하지 않는다.
  • 공식 웹사이트에 알 수 없는 변수를 사용한 문서 - 브루클린 미술관
    브루클린 미술관은 1823년 브루클린 견습생 도서관으로 시작하여 현재 약 50만 점의 소장품을 보유한 뉴욕 브루클린 소재의 미술관으로, 다양한 분야의 예술 작품을 전시하며 특히 아프리카 미술과 여성주의 미술에 대한 기여가 크다.
  • 공식 웹사이트에 알 수 없는 변수를 사용한 문서 - 광주지방기상청
    광주지방기상청은 광주광역시와 전라남도 지역의 기상 예보, 특보, 관측, 기후 정보 제공 등의 업무를 수행하는 기상청 소속 기관으로, 1949년 광주측후소로 설치되어 1992년 광주지방기상청으로 개편되었으며, 기획운영과, 예보과, 관측과, 기후서비스과와 전주기상지청, 목포기상대를 두고 있다.
Pandas - [IT 관련 정보]에 관한 문서
개요
판다스 로고
판다스 로고
저자웨스 맥키니
개발자커뮤니티
출시일2008년 1월 11일
최신 안정 버전 출시일}}
최신 시험 버전2.0rc1
최신 시험 버전 출시일2023년 3월 15일
프로그래밍 언어파이썬, 사이썬, C
운영 체제크로스 플랫폼
장르기술 컴퓨팅
라이선스새로운 BSD 라이선스
웹사이트판다스 공식 웹사이트
설명
설명데이터 분석을 위한 파이썬 라이브러리

2. 역사

웨스 맥키니는 2008년 AQR 캐피탈 매니지먼트에서 금융 데이터의 계량 분석을 위한 고성능의 유연한 도구가 필요하여 Pandas 개발을 시작했다.[6] 이후 오픈 소스로 공개되었으며, 여러 기여자들이 참여하며 발전해왔다.

2. 1. 개발 배경

개발자 웨스 맥키니는 AQR 캐피탈 매니지먼트에서 금융 데이터의 계량 분석을 위한 고성능의 유연한 도구가 필요하여 2008년에 pandas 개발을 시작했다. AQR을 떠나기 전, 그는 경영진을 설득하여 라이브러리를 오픈 소스로 공개할 수 있었다. 이는 정보 공유와 개방성을 중시하는 가치와 부합하는 결정이었다.

또 다른 AQR 직원인 창 셰(Chang She)는 2012년에 라이브러리의 두 번째 주요 기여자로 합류했다. 같은 시기에 파이썬 커뮤니티에서 라이브러리가 널리 퍼지면서 더 많은 기여자가 프로젝트에 참여하게 되었다.

2015년, pandas는 미국의 501(c)(3) 조직인 넘포커스의 재정 후원 프로젝트가 되었다.[6]

연도주요 내용
2008년pandas 개발 시작
2009년pandas 오픈 소스 공개
2012년데이터 분석을 위한 Python 초판 출판
2015년넘포커스 후원 프로젝트 등록
2018년첫 번째 대면 핵심 개발자 스프린트


2. 2. 주요 연혁

웨스 맥키니는 2008년 AQR 캐피탈 매니지먼트에서 근무하면서 금융 데이터에 대한 고성능의 유연한 계량 분석 도구의 필요성을 느껴 Pandas 개발을 시작했다. AQR을 떠나기 전 경영진을 설득하여 라이브러리를 오픈 소스로 공개할 수 있었으며, 2009년 공식적으로 오픈 소스가 되었다.

2012년에는 또 다른 AQR 직원이었던 창 셰가 라이브러리의 두 번째 주요 기여자로 합류했다. 같은 해에 웨스 맥키니의 저서 'Python for Data Analysis' 초판이 출판되었고, 파이썬 커뮤니티 내에서 Pandas의 인기가 높아지면서 더 많은 기여자들이 프로젝트에 참여하기 시작했다.

2015년, Pandas는 미국의 501(c)(3) 비영리 자선 단체인 넘포커스(NumFOCUS)의 재정 후원 프로젝트가 되었다.[6] 2018년에는 첫 번째 대면 핵심 개발자 스프린트가 개최되었다.

3. 데이터 모델

Pandas는 주로 두 가지 핵심 데이터 구조인 `''Series''`와 `''DataFrame''`을 기반으로 작동한다. 이 데이터 구조들은 다양한 형식의 파일로부터 데이터를 불러올 수 있다. 예를 들어 CSV, JSON, Parquet, SQL 데이터베이스 테이블 또는 쿼리 결과, 그리고 마이크로소프트 엑셀 파일 등이 해당된다.[7]

`''Series''`는 NumPy 배열을 기반으로 하는 1차원 데이터 구조로, 각 데이터 포인트에 고유한 레이블, 즉 인덱스가 부여된다.[8][3] `''DataFrame''`은 행과 열로 구성된 2차원 데이터 구조로, 마치 스프레드시트와 유사하다. 각 열은 하나의 `''Series''`로 구성되며, 모든 열은 같은 인덱스를 공유한다. 이는 Python의 딕셔너리가 열 이름(키)과 `''Series''`(값)를 연결하는 방식과 비슷하다.[3]

Pandas는 이 외에도 3차원 데이터 구조인 `''Panel''`과 4차원 데이터 구조인 `''Panel4D''`도 지원하지만, 이들은 상대적으로 덜 사용된다.[8]

3. 1. 시리즈(Series)

Pandas는 ''Series''와 ''DataFrame''이라는 데이터 구조를 기반으로 구축되었다.[7]

''Series''는 NumPy배열을 기반으로 구축된 1차원 데이터 구조이다.[8] NumPy 배열과 달리 각 데이터 포인트에는 연결된 레이블이 있으며, 이러한 레이블의 모음을 인덱스라고 한다.[3] Series는 산술적으로 사용될 수 있다. 예를 들어, series_3 = series_1 + series_2와 같은 구문은 series_1series_2의 해당 인덱스 값과 데이터 포인트를 정렬한 다음 함께 더하여 series_3에 새로운 값을 생성한다.[3] Pandas는 NumPy를 기반으로 구축되었으므로 모든 NumPy 함수는 Series에서도 작동한다.[8]

3. 2. 데이터프레임(DataFrame)

''DataFrame''은 Pandas 라이브러리의 핵심 데이터 구조 중 하나로, 행과 열로 이루어진 2차원 테이블 형태를 가진다. 이는 스프레드시트와 유사하다.[3] 각 열(column)은 하나의 `Series` 데이터 구조에 해당하며, 여러 개의 Series가 모여 하나의 DataFrame을 구성한다. 이때 각 Series는 동일한 인덱스를 공유한다. 이는 Python의 딕셔너리가 열 이름(키)과 Series(값)를 매핑하는 방식과 비슷하다.[3] 각 열은 서로 다른 데이터 타입을 가질 수 있다.

DataFrame은 SQL의 조인 연산과 유사하게, 특정 열이나 인덱스를 기준으로 여러 DataFrame을 합치거나 "병합"할 수 있다.[3] Pandas는 관계형 대수의 일부 기능을 구현하여, 일대일, 다대일, 다대다 조인을 모두 지원한다.[8]

DataFrame 객체는 데이터를 빠르고 효율적으로 조작하기 위해 설계되었다. 메모리에 있는 데이터 구조와 CSV, 텍스트 파일, 엑셀, SQL데이터베이스, HDF5 등 다양한 파일 형식 간의 데이터 읽기/쓰기를 지원하는 도구를 제공한다. 또한 데이터 정렬, 결손값 처리, 데이터 세트의 유연한 변형 및 피벗, 레이블 기반 슬라이싱 및 인덱싱, 대규모 데이터 세트의 부분 집합 추출 등 다양한 데이터 처리 기능을 제공한다. 강력한 그룹화(group by) 기능을 통해 데이터를 집계하고 변환하는 'split-apply-combine' 연산을 수행할 수 있으며, 고성능의 데이터 병합 및 결합 기능을 갖추고 있다. 성능 향상을 위해 핵심 코드는 Cython이나 C언어로 작성되기도 한다.[13]

3. 3. 인덱스(Index)

기본적으로 Pandas 인덱스는 0부터 시작하는 정수 시퀀스로, 파이썬 배열의 인덱스와 비슷하다.[3] 하지만 인덱스는 부동소수점, 타임스탬프, 문자열 등 모든 NumPy 데이터 타입을 사용할 수 있다.[3]

Pandas에서 인덱스 값을 관련 데이터에 연결하는 방식은 파이썬 딕셔너리에서 키와 값을 연결하는 방식과 같다. 예를 들어, `s`가 Series일 때 `'s[\'a\']'`는 인덱스 `a`에 해당하는 데이터 값을 반환한다.[3] 딕셔너리 키와는 다르게 인덱스 값은 꼭 고유할 필요는 없다. 만약 Series에서 여러 데이터 값이 동일한 인덱스 `a`를 사용한다면, `'s[\'a\']'`는 해당 인덱스를 가진 모든 값을 포함하는 새로운 Series를 반환한다.[3]

DataFrame의 열 이름도 인덱스와 동일한 방식으로 저장되고 구현된다. 따라서 DataFrame은 열과 행, 두 종류의 인덱스를 가진다고 볼 수 있다. 열 이름 역시 인덱스로 저장되므로 고유하지 않아도 된다.[8]

`data`가 Series일 때 `'data[\'a\']'`는 인덱스 값이 `a`인 모든 데이터를 반환하지만, `data`가 DataFrame일 때는 `a`라는 이름의 열에 있는 모든 값을 반환한다. 이런 혼동을 피하기 위해 Pandas는 인덱스 레이블을 사용하여 필터링하는 방법으로 `'data.loc[\'a\']'` 구문을 제공한다.[8] 또한, Pandas는 정수 위치를 기반으로 데이터를 선택하는 `'data.iloc[n]'` 구문도 지원한다. 이 구문은 항상 0부터 시작하여 n번째 위치의 값을 반환하므로, 실제 인덱스 타입과 관계없이 데이터를 배열처럼 다룰 수 있게 해준다.[8]

3. 4. 계층적 인덱스 (MultiIndex)

Pandas는 데이터 포인트당 여러 값을 갖는 계층적 인덱스를 지원한다. "MultiIndex"라고 불리는 이 구조의 인덱스를 사용하면 하나의 데이터프레임으로 여러 차원의 데이터를 표현할 수 있는데, 이는 마이크로소프트 엑셀의 피벗 테이블과 유사한 방식이다.[3] MultiIndex의 각 레벨(계층)에는 고유한 이름을 지정할 수 있다.[8] 실제로 2차원 이상의 데이터를 다룰 때, 과거에 사용되던 더 높은 차원의 'Panel'이나 'Panel4D' 같은 데이터 구조 대신 계층적 인덱스를 가진 DataFrame을 사용하는 경우가 많다.[8]

4. 라이브러리 기능

Pandas는 데이터 분석 및 조작을 위한 파이썬 라이브러리로, 다양한 기능을 제공한다. 핵심 기능 중 하나는 데이터 조작을 위한 빠르고 효율적인 데이터 프레임(DataFrame) 객체를 제공하는 것이다. 이를 통해 사용자는 통합된 인덱싱을 활용하여 데이터를 편리하게 다룰 수 있다.

또한, Pandas는 다양한 데이터 형식 간의 입출력을 지원한다. 메모리에 있는 데이터 구조와 쉼표로 구분된 값(CSV), 텍스트 파일, 마이크로소프트 엑셀(Excel), SQL 데이터베이스, JSON, HDF5 등 여러 파일 형식 간에 데이터를 쉽게 읽고 쓸 수 있는 도구를 제공한다.[7]

이 외에도 Pandas는 다음과 같은 광범위한 데이터 처리 기능을 포함한다.


  • 데이터 정렬 및 누락된 데이터의 통합 처리
  • 데이터 세트의 재구성 및 피벗
  • 레이블 기반 슬라이싱, 팬시 인덱싱(fancy indexing), 부분 집합 추출
  • 데이터 구조의 열 삽입 및 삭제
  • 데이터 집계 및 변환을 위한 강력한 그룹화(group by) 기능 (split-apply-combine)
  • 데이터 세트 병합 및 결합
  • 시계열 데이터 처리 기능 (날짜 범위 생성[12], 빈도 변환, 이동 창 통계 및 회귀, 날짜 이동 등)
  • 데이터 필터링


이러한 기능들은 데이터 정제, 변환, 분석 등 데이터 처리의 전 과정에 걸쳐 유용하게 사용될 수 있다. 라이브러리의 성능 최적화를 위해 중요한 코드는 Cython이나 C로 작성되어 있다.[13]

4. 1. 데이터 처리 기능

Pandas는 데이터 분석 작업을 위한 다양한 기능을 제공하며, 특히 데이터 조작에 강점을 보인다. 핵심 데이터 구조인 SeriesDataFrame을 기반으로 다양한 연산을 수행할 수 있다.

  • 데이터 구조:
  • ''Series'': NumPy 배열 기반의 1차원 데이터 구조로, 각 데이터 포인트에 레이블(인덱스)이 연결되어 있다.[8] 인덱스를 기준으로 정렬하고 산술 연산을 수행할 수 있다.[3]
  • ''DataFrame'': 행과 열로 구성된 2차원 데이터 구조로, 스프레드시트와 유사하다. 여러 Series가 인덱스를 공유하는 형태로 볼 수 있으며, Python의 딕셔너리처럼 열 이름을 키로, Series를 값으로 가진다.[3] DataFrames는 SQL의 조인과 유사하게 열이나 인덱스를 기준으로 병합할 수 있으며, 일대일, 다대일, 다대다 조인을 지원한다.[3][8] 3차원(Panel) 및 4차원(Panel4D) 데이터 구조도 지원하지만 덜 사용된다.[8]

  • 데이터 입출력:
  • 메모리 내 데이터 구조와 다양한 파일 형식 간에 데이터를 읽고 쓰는 도구를 제공한다. 지원하는 형식에는 CSV, 텍스트 파일, Excel, SQL 데이터베이스, HDF5 등이 있다.[7]

  • 데이터 조작 및 처리:
  • 데이터 정렬 및 누락 데이터 처리: 데이터를 정렬하고, 부동소수점 값인 NaN으로 표현되는 누락된 데이터를 통합적으로 처리하는 기능을 제공한다.[3]
  • 재구성 및 피벗: 데이터 세트를 유연하게 변형하고 피벗하는 기능을 지원한다.
  • 슬라이싱, 인덱싱, 부분 집합 추출: 레이블 기반 슬라이싱, 팬시 인덱싱 등을 통해 대규모 데이터 세트에서 원하는 부분 집합을 효율적으로 추출할 수 있다. 예를 들어, `df[df['col1'] > 5]`와 같은 부울 표현식을 사용하여 특정 조건을 만족하는 행만 선택할 수 있다.[3]
  • 열 삽입 및 삭제: DataFrame 구조에서 열을 쉽게 추가하거나 삭제할 수 있다.
  • 그룹화 (Group By): 데이터를 특정 조건에 따라 그룹으로 나누고(split), 각 그룹에 함수를 적용한 뒤(apply), 결과를 결합(combine)하는 강력한 'group by' 연산을 지원한다. 열 값이나 인덱스에 적용되는 함수를 기준으로 그룹화할 수 있다.[3]
  • 병합 및 결합: 여러 데이터 세트를 SQL의 조인처럼 병합하거나 결합하여 통합 분석을 수행할 수 있다.[3]
  • 계층적 축 인덱싱: 다중 인덱스를 사용하여 고차원 데이터를 저차원 데이터 구조에서 효과적으로 다룰 수 있게 한다.
  • 사용자 정의 함수 적용: 사용자가 직접 정의한 함수를 데이터에 적용하여 변환하거나 요약할 수 있다.[3] Pandas는 NumPy 기반이므로 모든 NumPy 함수도 Series 및 DataFrame에서 작동한다.[8]
  • 내장 연산: 평균, 중앙값, 표준 편차 등 기본적인 산술 연산, 문자열 조작, 요약 통계 기능을 내장하고 있으며, 이 함수들은 누락된 데이터를 처리하도록 설계되었다.[3]

  • 시계열 데이터 처리:
  • 시계열 데이터 처리에 특화된 기능을 제공한다. 날짜 범위 생성[12], 빈도 변환, 이동 창(moving window)을 이용한 통계 계산 및 선형 회귀 분석, 날짜 이동(shifting) 및 지연(lagging) 등을 지원한다.
  • 시계열 데이터의 누락값은 일반적인 NaN 대신 특별한 ''NaT''(Not a Timestamp) 객체로 표현한다.[3]
  • 보간을 통해 누락된 시계열 값을 추정하거나, 타임스탬프 범위를 이용해 데이터를 필터링할 수 있다(예: `data['1/1/2023':'2/2/2023']`).[3]

  • 데이터 필터링: 다양한 조건을 사용하여 원하는 데이터를 선택하고 필터링하는 기능을 제공한다.


Pandas 라이브러리는 성능 최적화를 위해 중요한 코드가 Cython이나 C로 작성되어 있어 빠르고 효율적인 데이터 처리가 가능하다.[13]

4. 2. 성능 최적화

Pandas 라이브러리는 성능 향상을 위해 고도로 최적화되어 있다. 특히 속도가 중요한 핵심 코드는 Cython 또는 C언어를 사용하여 구현되었다[13].

5. 비판

판다스는 비효율성으로 비판을 받아왔다. 판다스는 기반 데이터 크기의 5~10배에 달하는 메모리를 필요로 할 수 있으며, 전체 데이터 세트를 RAM에 로드해야 한다. 이 라이브러리는 쿼리 계획을 최적화하거나 여러 코어에서 병렬 컴퓨팅을 지원하지 않는다. 판다스 개발자인 웨스 매키니는 이러한 성능 문제와 기타 제한 사항을 해결하기 위해 아파치 애로우를 대안으로 권장했다.[9]

참조

[1] 웹사이트 License – Package overview – pandas 1.0.0 documentation https://pandas.pydat[...] 2020-01-28
[2] 웹사이트 pandas: a Foundational Python Library for Data Analysis and Statistics https://www.dlr.de/s[...] 2011
[3] 서적 Python for Data Analysis O'Reilly 2014
[4] 웹사이트 Meet the man behind the most important tool in data science https://qz.com/11266[...]
[5] 웹사이트 Comparison with R https://pandas.pydat[...]
[6] 웹사이트 NumFOCUS – pandas: a fiscally sponsored project https://www.numfocus[...]
[7] 웹사이트 IO tools (Text, CSV, HDF5, …) — pandas 1.4.1 documentation https://pandas.pydat[...]
[8] 서적 Python Data Science Handbook: Essential Tools for Working with Data O'Reilly 2016
[9] 웹사이트 Apache Arrow and the "10 Things I Hate About pandas" https://wesmckinney.[...] 2017-09-21
[10] 웹사이트 pandas: a Foundational Python Library for Data Analysis and Statistics https://www.dlr.de/s[...] 2011
[11] 웹사이트 License – Package overview – pandas 0.21.1 documentation https://pandas.pydat[...] 2017-12-12
[12] 웹사이트 pandas.date_range – pandas 0.21.1 documentation https://pandas.pydat[...] 2017-12-12
[13] 웹사이트 Python Data Analysis Library – pandas: Python Data Analysis Library https://pandas.pydat[...]
[14] 웹사이트 NumFOCUS – pandas: a fiscally sponsored project https://www.numfocus[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com