Pandas(스타일은 pandas)는 Python 프로그래밍 언어를 위해 작성된 소프트웨어 라이브러리로, 데이터 조작 및 분석을 위한 것이다. 특히, 수치 표와 시계열을 조작하기 위한 데이터 구조와 연산을 제공한다. 이는 3-clause BSD 라이선스로 배포되는 자유 소프트웨어이다. 이름은 "패널 데이터(panel data)"라는 용어에서 유래했는데, 이는 동일한 개인에 대해 여러 시간 기간에 걸친 관측치를 포함하는 데이터 세트를 의미하는 계량경제학 용어이며, "Python data analysis"라는 문구의 말장난이기도 하다. Wes McKinney는 2007년부터 2010년까지 AQR Capital에서 연구원으로 재직하는 동안 그곳에서 Pandas가 될 것을 구축하기 시작했다.
Pandas의 개발은 R 프로그래밍 언어에서 확립된 DataFrame 작업의 많은 유사한 기능을 Python에 도입했다. 이 라이브러리는 또 다른 라이브러리인 NumPy 위에 구축되었다.
역사
개발자 Wes McKinney는 2008년 AQR Capital Management에서 금융 데이터에 대한 정량적 분석을 수행하기 위한 고성능의 유연한 도구의 필요성으로 Pandas 작업을 시작했다. AQR을 떠나기 전에 그는 2009년에 라이브러리를 오픈 소스로 공개하도록 경영진을 설득할 수 있었다. 또 다른 AQR 직원인 Chang She는 2012년에 라이브러리의 두 번째 주요 기여자로 이 노력에 합류했다. 2015년에 Pandas는 미국의 501(c)(3) 비영리 자선 단체인 NumFOCUS의 재정 지원 프로젝트로 서명했다.
데이터 모델
Pandas는 Series와 DataFrame이라는 데이터 구조를 중심으로 구축된다. 이러한 컬렉션의 데이터는 쉼표로 구분된 값, JSON, Parquet, SQL 데이터베이스 테이블 또는 쿼리, Microsoft Excel과 같은 다양한 파일 형식에서 가져올 수 있다.
Series
Series는 값의 시퀀스를 인덱스라고 하는 관련 레이블 집합과 함께 저장하는 1차원 배열형 객체이다. 이는 NumPy의 배열 위에 구축되며 많은 유사한 기능을 제공하지만, 암시적 정수 위치 대신 Series는 다양한 데이터 유형의 명시적 인덱스 레이블을 허용한다. Series는 Python 리스트, 사전 또는 NumPy 배열에서 생성할 수 있다. 인덱스가 제공되지 않으면 pandas는 0에서 n-1까지의 기본 정수 인덱스를 자동으로 할당하며, 여기서 n은 Series의 항목 수이다.
Series에서 값 또는 값 목록에 접근하려면 해당 인덱스 또는 인덱스 목록을 사용한다. Series는 series_3 = series_1 + series_2와 같은 문장에서 산술적으로 사용될 수 있다. 이는 series_1과 series_2의 해당 인덱스 값과 데이터 포인트를 정렬한 다음(관계 대수의 조인과 유사) 이를 더하여 series_3에서 새 값을 생성한다. Series에는 name(Series 이름), dtype(값의 데이터 유형), shape(행 수), values 및 index와 같은 다양한 속성이 있다. 이들은 NumPy 배열과 동일한 많은 연산에서 사용될 수 있으며, 재인덱싱, 레이블 기반 선택 및 누락 데이터 처리를 위한 추가 메서드가 있다.
DataFrame
DataFrame은 레이블이 지정된 행과 열이 있는 2차원 표 형식 데이터 구조이다. 각 열은 내부적으로 Series로 저장되며 서로 다른 데이터 유형(숫자, 문자열, 부울 등)을 보유할 수 있다. DataFrame은 리스트의 사전, NumPy 배열 및 CSV 또는 Excel 스프레드시트와 같은 외부 파일을 포함한 다양한 방법으로 생성할 수 있다. DataFrame 열을 Series로 검색하려면 인덱스(사전형 표기법) 또는 열 이름이 유효한 Python 식별자인 경우 열 이름(속성형 접근)을 사용한다. DataFrame은 열 할당, 행 및 열 삭제, loc를 사용한 레이블 기반 인덱싱, iloc를 사용한 위치 기반 인덱싱, 재구성, 그룹화 및 조인과 같은 연산을 지원한다. 병합 연산은 관계 대수의 하위 집합을 구현하며 일대일, 다대일 및 다대다 조인을 허용한다.
DataFrame의 몇 가지 일반적인 속성으로는 dtypes(각 열의 데이터 유형), shape(DataFrame의 차원을 (행 수, 열 수) 형태의 튜플로 반환), index/columns(DataFrame의 행/열 레이블을 각각 Index 객체로 반환), values(DataFrame의 데이터를 2D 배열로 반환) 및 empty(DataFrame이 비어 있으면 True를 반환)가 있다.
인덱스
Index 객체는 축 레이블 및 이름과 같은 Series 및 DataFrame 객체의 메타데이터를 보유하며 입력 데이터에서 자동으로 생성된다. 기본적으로 pandas 인덱스는 Python 배열의 인덱스와 유사하게 0에서 오름차순으로 증가하는 정수 시리즈이다. 그러나 인덱스는 부동 소수점, 타임스탬프 또는 문자열을 포함한 모든 NumPy 데이터 유형을 사용할 수도 있다. 인덱스는 또한 불변이므로 여러 객체 간에 안전하게 공유될 수 있다.
pandas의 인덱스 값을 관련 데이터에 매핑하는 구문은 Python이 사전 키를 값에 매핑하는 데 사용하는 구문과 동일하다. 예를 들어, s가 Series인 경우 s['a']는 인덱스 a의 데이터 포인트를 반환한다. 사전 키와 달리 인덱스 값은 고유할 필요가 없다. Series가 여러 데이터 포인트에 인덱스 값 a를 사용하는 경우 s['a']는 대신 모든 일치 값을 포함하는 새 Series를 반환한다. DataFrame의 열 이름은 인덱스와 동일하게 저장되고 구현된다. 따라서 DataFrame은 열 기반과 행 기반의 두 가지 인덱스를 가진 것으로 생각할 수 있다. 열 이름이 인덱스로 저장되므로 고유할 필요가 없다.
data가 Series인 경우 data['a']는 인덱스 값이 a인 모든 값을 반환한다. 그러나 data가 DataFrame인 경우 data['a']는 이름이 a인 열의 모든 값을 반환한다. 이러한 모호성을 피하기 위해 Pandas는 인덱스를 사용하여 필터링하는 대체 방법으로 data.loc['a'] 구문을 지원한다. Pandas는 또한 항상 정수 n을 취하고 0부터 세는 n번째 값을 반환하는 data.iloc[n] 구문을 지원한다. 이를 통해 사용자는 인덱스가 실제로 어떻게 정의되었는지에 관계없이 인덱스를 정수 배열형 시퀀스처럼 취급할 수 있다.
pandas는 또한 "MultiIndex" 클래스를 통해 데이터 포인트당 여러 값을 가진 계층적 인덱스를 지원한다. MultiIndex 객체는 단일 DataFrame이 Microsoft Excel의 피벗 테이블과 유사하게 여러 차원을 나타낼 수 있게 하며, 각 수준은 선택적으로 고유한 이름을 가질 수 있다. 실제로 2차원 이상의 데이터는 더 높은 차원의 Panel 및 Panel4D 데이터 구조 대신 계층적 인덱스를 가진 DataFrame을 사용하여 표현되는 경우가 많다.
기능
pandas는 레이블, 인덱스 또는 부울 조건으로 데이터를 선택할 수 있게 하는 다양한 인덱싱 및 하위 집합 기술을 지원한다. 예를 들어, df[df['col1'] > 5]는 열 col1의 값이 5를 초과하는 DataFrame df의 모든 행을 반환한다. 이 라이브러리는 또한 분할-적용-결합 접근 방식에 기반한 그룹화 연산을 구현하여 사용자가 열 값 또는 인덱스 레이블에 적용된 함수에 따라 데이터를 집계, 변환 또는 재구성할 수 있게 한다. 예를 들어, df['col1'].groupby(df['col2'])는 'col1'의 데이터를 'col2'의 값으로 그룹화하고, df.groupby(lambda i: i % 2)는 전체 DataFrame의 모든 데이터를 인덱스가 짝수인지 여부로 그룹화한다.
이 라이브러리는 또한 누락 데이터 처리, 데이터 세트 병합 및 조인, 데이터 재구성(예: 피벗 및 멜팅), 시계열 기능 및 많은 파일 형식에 대한 입력/출력 도구를 제공한다. 이러한 기능은 pandas를 Python 데이터 과학 생태계의 초석으로 만들며, 종종 Machine learning 라이브러리 및 Artificial intelligence 워크플로우와 함께 사용된다. NumPy 배열과의 통합 및 Deep learning 프레임워크와의 호환성은 금융에서 Amazon Web Services 클라우드 분석에 이르는 산업 전반의 데이터 전처리 파이프라인에서 그 역할을 공고히 했다.