파이썬 Pandas 모듈
- Pandas는 파이썬의 오픈 소스 라이브러리입니다. 이는 사용 준비가 된 고성능 데이터 구조와 데이터 분석 도구를 제공합니다.
- Pandas 모듈은 NumPy 위에서 실행되며, 데이터 과학과 데이터 분석에 널리 사용됩니다.
- NumPy는 다차원 배열과 다양한 수학적 배열 연산을 지원하는 저수준 데이터 구조입니다. Pandas는 좀 더 고수준의 인터페이스를 제공합니다. 또한 정렬된 탭형식 데이터와 강력한 시계열 기능을 제공합니다.
- DataFrame은 Pandas에서의 핵심 데이터 구조입니다. 이를 사용하여 탭형식 데이터를 2차원 데이터 구조로 저장하고 조작할 수 있습니다.
- Pandas는 DataFrame에서 다양한 기능을 제공합니다. 예를 들어, 데이터 정렬, 데이터 통계, 슬라이싱, 그룹화, 데이터 병합, 데이터 연결 등입니다.
Pandas 설치 및 시작하기
Pandas 모듈을 설치하려면 Python 2.7 이상이 필요합니다. 만약 conda를 사용 중이라면 아래 명령어를 사용하여 설치할 수 있습니다.
conda install pandas
PIP을 사용하고 있다면 아래 명령을 실행하여 pandas 모듈을 설치하십시오.
pip3.7 install pandas

Python 스크립트에서 Pandas와 NumPy를 가져오려면 아래 코드 조각을 추가하십시오.
import pandas as pd
import numpy as np
Pandas는 NumPy 라이브러리에 의존하기 때문에 이 종속성을 가져와야 합니다.
Pandas 모듈의 데이터 구조
Pandas 모듈에서 제공하는 3가지 데이터 구조는 다음과 같습니다.
- Series: 동일한 유형의 데이터를 가진 1차원 크기가 고정된 배열과 같은 구조입니다.
- DataFrames: 서로 다른 유형의 열로 구성된 2차원 크기가 가변적인 테이블 구조입니다.
- Panel: 크기가 가변적인 3차원 배열입니다.
Pandas DataFrame
DataFrame은 가장 중요하고 널리 사용되는 데이터 구조로, 데이터를 저장하는 표준 방법입니다. DataFrame은 행과 열로 정렬된 데이터를 가지며 SQL 테이블이나 스프레드시트 데이터베이스와 유사한 형태입니다. DataFrame에 데이터를 직접 넣을 수도 있고, CSV 파일, tsv 파일, Excel 파일, SQL 테이블 등을 가져올 수도 있습니다. 아래 생성자를 사용하여 DataFrame 객체를 생성할 수 있습니다.
pandas.DataFrame(data, index, columns, dtype, copy)
아래는 매개변수에 대한 간단한 설명입니다:
- 데이터 – 입력 데이터로부터 DataFrame 객체를 생성합니다. 리스트, 사전, 시리즈, 넘파이 ndarray 또는 다른 DataFrame일 수 있습니다.
- 인덱스 – 행 레이블을 가지고 있습니다.
- 열 – 열 레이블을 생성하는 데 사용됩니다.
- dtype – 각 열의 데이터 유형을 지정하는 데 사용되는 선택적 매개변수입니다.
- copy – 데이터를 복사하기 위해 사용됩니다.
DataFrame을 생성하는 여러 가지 방법이 있습니다. 우리는 사전 또는 사전의 리스트에서 DataFrame 객체를 생성할 수 있습니다. 또한 튜플의 리스트, CSV, Excel 파일 등에서도 생성할 수 있습니다. 간단한 코드를 실행하여 사전의 리스트에서 DataFrame을 생성해 보겠습니다.
import pandas as pd
import numpy as np
df = pd.DataFrame({
"State": ['Andhra Pradesh', 'Maharashtra', 'Karnataka', 'Kerala', 'Tamil Nadu'],
"Capital": ['Hyderabad', 'Mumbai', 'Bengaluru', 'Trivandrum', 'Chennai'],
"Literacy %": [89, 77, 82, 97,85],
"Avg High Temp(c)": [33, 30, 29, 31, 32 ]
})
print(df)
출력: 첫 번째 단계는 사전을 생성하는 것입니다. 두 번째 단계는 DataFrame() 메서드에 사전을 인수로 전달하는 것입니다. 마지막 단계는 DataFrame을 출력하는 것입니다. DataFrame은 이처럼 이질적인 값을 가진 테이블과 비교할 수 있습니다. 또한 DataFrame의 크기를 수정할 수 있습니다. 우리는 데이터를 맵 형식으로 제공하고, 맵의 키는 Pandas에서 행 레이블로 간주됩니다. 인덱스는 가장 왼쪽 열에 표시되며 행 레이블을 가지고 있습니다. 열 헤더와 데이터는 표 형태로 표시됩니다. 또한 인덱스가 있는 DataFrame을 생성하는 것도 가능합니다. 이는
DataFrame()
메서드의 인덱스 매개변수를 설정하여 수행할 수 있습니다.
CSV에서 데이터를 DataFrame으로 가져오기
CSV 파일을 가져와서 DataFrame을 생성할 수도 있습니다. CSV 파일은 한 줄에 하나의 데이터 레코드가 있는 텍스트 파일입니다. 레코드 내의 값은 “쉼표” 문자를 사용하여 구분됩니다. Pandas는 CSV 파일의 내용을 DataFrame으로 읽기 위한 유용한 메소드인 read_csv()
를 제공합니다. 예를 들어, ‘cities.csv’라는 파일에 인도 도시의 세부 정보를 포함시킬 수 있습니다. CSV 파일은 Python 스크립트가 있는 동일한 디렉토리에 저장되어 있어야 합니다. 다음과 같이 가져올 수 있습니다:
import pandas as pd
data = pd.read_csv('cities.csv')
print(data)
. 데이터를 로드하고 분석하여 결론을 도출하는 것이 목표입니다. 따라서 데이터를 로드하기 위해 편리한 방법을 사용할 수 있습니다. 이 튜토리얼에서는 DataFrame의 데이터를 하드코딩하고 있습니다.
DataFrame에서 데이터 검사
DataFrame를 이름으로 실행하면 전체 테이블이 표시됩니다. 실시간으로 분석할 데이터셋은 수천 개의 행을 가질 것입니다. 데이터를 분석하기 위해 우리는 거대한 양의 데이터셋에서 데이터를 검토해야 합니다. 판다스는 필요한 데이터만 검사하기 위해 많은 유용한 함수를 제공합니다. df.head(n)
을 사용하여 처음 n개의 행을 가져오거나 df.tail(n)
을 사용하여 마지막 n개의 행을 출력할 수 있습니다. 예를 들어, 아래 코드는 DataFrame에서 처음 2개의 행과 마지막 1개의 행을 출력합니다.
print(df.head(2))
출력:
print(df.tail(1))
출력: 마찬가지로,
print(df.dtypes)
은 데이터 유형을 출력합니다. 출력:
print(df.index)
는 인덱스를 출력합니다. 출력:
print(df.columns)
는 DataFrame의 열을 출력합니다. 출력:
print(df.values)
는 테이블 값들을 표시합니다. 출력:
1. 레코드의 통계적 요약 정보 얻기
우리는 df.describe()
함수를 사용하여 데이터의 통계 요약(개수, 평균, 표준 편차, 최소, 최대 등)을 얻을 수 있습니다. 이제 “Literacy %” 열의 통계 요약을 표시하기 위해 다음 코드 조각을 추가해 봅시다:
print(df['Literacy %'].describe())
출력:
df.describe()
함수는 데이터 유형과 함께 통계 요약을 표시합니다.
2. 레코드 정렬
우리는 df.sort_values()
함수를 사용하여 어떤 열이든지 정렬할 수 있습니다. 예를 들어, “Literacy %” 열을 내림차순으로 정렬해 봅시다.
print(df.sort_values('Literacy %', ascending=False))
출력:
3. 레코드 슬라이싱
특정 열의 데이터를 추출하는 것도 가능합니다. 예를 들어, ‘Capital’ 열을 추출하려면 다음을 사용합니다:
df['Capital']
또는
(df.Capital)
출력: 여러 개의 열을 잘라내는 것도 가능합니다. 이는 2개의 대괄호로 묶인 여러 개의 열 이름을 사용하여 수행됩니다. 열 이름은 쉼표로 구분됩니다. 다음 코드는 데이터프레임의 ‘State’와 ‘Capital’ 열을 잘라냅니다.
print(df[['State', 'Capital']])
출력: 행도 잘라낼 수 있습니다. 여러 개의 행은 “:” 연산자를 사용하여 선택할 수 있습니다. 아래 코드는 첫 3개의 행을 반환합니다.
df[0:3]
출력: Pandas 라이브러리의 흥미로운 기능 중 하나는
iloc[0]
함수를 사용하여 행과 열 레이블에 따라 데이터를 선택하는 것입니다. 종종 분석에 필요한 몇 개의 열만 필요할 수 있습니다. 인덱스를 사용하여 선택할 수도 있습니다 (loc['index_one'])
). 예를 들어, 두 번째 행을 선택하려면 df.iloc[1,:]
를 사용할 수 있습니다. 두 번째 열의 두 번째 요소를 선택해야 한다면 df.iloc[1,1]
함수를 사용하면 됩니다. 이 예제에서는 df.iloc[1,1]
함수가 “Mumbai”를 출력합니다.
4. 데이터 필터링
열 값에 대한 필터링도 가능합니다. 예를 들어, 아래 코드는 문해율이 90% 이상인 열을 필터링합니다.
print(df[df['Literacy %']>90])
어떤 비교 연산자든 조건에 따라 필터링하는 데 사용할 수 있습니다. 출력: 데이터를 필터링하는 또 다른 방법은 `isin`을 사용하는 것입니다. 다음은 ‘Karnataka’와 ‘Tamil Nadu’ 두 개의 상태만 필터링하는 코드입니다.
print(df[df['State'].isin(['Karnataka', 'Tamil Nadu'])])
출력:
5. 열 이름 변경
`df.rename()` 함수를 사용하여 열 이름을 변경할 수 있습니다. 이 함수는 이전 열 이름과 새 열 이름을 인수로 받습니다. 예를 들어, ‘Literacy %’ 열의 이름을 ‘Literacy percentage’로 변경해보겠습니다.
df.rename(columns = {'Literacy %':'Literacy percentage'}, inplace=True)
print(df.head())
`inplace=True` 인수는 변경 사항을 DataFrame에 적용합니다. 출력:
6. 데이터 조작
데이터 과학은 데이터가 데이터 알고리즘과 잘 작동할 수 있도록 데이터를 처리하는 과정을 포함합니다. 데이터 Wrangling은 병합, 그룹화 및 연결과 같은 데이터 처리 과정입니다. Pandas 라이브러리는 merge()
, groupby()
및 concat()
과 같은 유용한 함수를 제공하여 데이터 Wrangling 작업을 지원합니다. 이해를 돕기 위해 2 개의 데이터프레임을 생성하고 데이터 Wrangling 함수를 표시해 보겠습니다.
import pandas as pd
d = {
'Employee_id': ['1', '2', '3', '4', '5'],
'Employee_name': ['Akshar', 'Jones', 'Kate', 'Mike', 'Tina']
}
df1 = pd.DataFrame(d, columns=['Employee_id', 'Employee_name'])
print(df1)
출력: 아래 코드를 사용하여 두 번째 데이터프레임을 생성해 보겠습니다:
import pandas as pd
data = {
'Employee_id': ['4', '5', '6', '7', '8'],
'Employee_name': ['Meera', 'Tia', 'Varsha', 'Williams', 'Ziva']
}
df2 = pd.DataFrame(data, columns=['Employee_id', 'Employee_name'])
print(df2)
출력:
a. Merging
이제 ‘Employee_id’의 값을 사용하여 2 개의 데이터프레임을 병합하는 merge()
함수를 사용해 보겠습니다:
print(pd.merge(df1, df2, on='Employee_id'))
출력: 병합 시 사용된 동일한 열 값이 있는 두 개의 데이터프레임의 행이 반환되는 것을 볼 수 있습니다.
b. Grouping
그룹화는 데이터를 다른 범주로 수집하는 과정입니다. 예를 들어, 아래 예제에서 “Employee_Name” 필드에는 “Meera”라는 이름이 두 번 있습니다. 따라서 “Employee_name” 열로 그룹화해 보겠습니다.
import pandas as pd
import numpy as np
data = {
'Employee_id': ['4', '5', '6', '7', '8'],
'Employee_name': ['Meera', 'Meera', 'Varsha', 'Williams', 'Ziva']
}
df2 = pd.DataFrame(data)
group = df2.groupby('Employee_name')
print(group.get_group('Meera'))
“Employee_name” 열로 “Employee_name” 필드의 값 ‘Meera’가 그룹화됩니다. 샘플 출력은 다음과 같습니다: 출력:
c. Concatenating
데이터 연결은 한 세트의 데이터를 다른 세트에 추가하는 것을 의미합니다. 판다스는 데이터프레임을 연결하기 위한 concat()
함수를 제공합니다. 예를 들어, 다음과 같이 데이터프레임 df1
과 df2
를 연결해 보겠습니다. :
print(pd.concat([df1, df2]))
출력:
Dict of Series를 전달하여 데이터프레임 생성
시리즈를 생성하기 위해 pd.Series()
메소드를 사용하여 배열을 전달할 수 있습니다. 다음과 같이 간단한 시리즈를 생성해 보겠습니다:
series_sample = pd.Series([100, 200, 300, 400])
print(series_sample)
출력: 시리즈를 생성하였습니다. 0부터 시작하는 인덱스 값이 포함된 첫 번째 열과 시리즈로 전달된 요소가 포함된 두 번째 열이 표시됩니다. `Series`의 인덱스를 결합하여 데이터프레임을 생성하는 것도 가능합니다. 다음과 같이 시리즈의 인덱스를 결합하여 형성된 데이터프레임을 생성해 보겠습니다. 예시
d = {'Matches played' : pd.Series([400, 300, 200], index=['Sachin', 'Kohli', 'Raina']),
'Position' : pd.Series([1, 2, 3, 4], index=['Sachin', 'Kohli', 'Raina', 'Dravid'])}
df = pd.DataFrame(d)
print(df)
샘플 출력 시리즈 1의 경우, ‘d’ 레이블이 지정되지 않았으므로 NaN이 반환됩니다.
열 선택, 추가, 삭제
DataFrame에서 특정 열을 선택할 수 있습니다. 예를 들어, 위의 코드를 다음과 같이 수정하여 첫 번째 열만 표시할 수 있습니다:
d = {'Matches played' : pd.Series([400, 300, 200], index=['Sachin', 'Kohli', 'Raina']),
'Position' : pd.Series([1, 2, 3, 4], index=['Sachin', 'Kohli', 'Raina', 'Dravid'])}
df = pd.DataFrame(d)
print(df['Matches played'])
위의 코드는 DataFrame의 “Matches played” 열만 출력합니다. 결과 기존 DataFrame에 열을 추가하는 것도 가능합니다. 예를 들어, 아래의 코드는 위의 DataFrame에 “Runrate”라는 새로운 열을 추가합니다.
d = {'Matches played' : pd.Series([400, 300, 200], index=['Sachin', 'Kohli', 'Raina']),
'Position' : pd.Series([1, 2, 3, 4], index=['Sachin', 'Kohli', 'Raina', 'Dravid'])}
df = pd.DataFrame(d)
df['Runrate']=pd.Series([80, 70, 60, 50], index=['Sachin', 'Kohli', 'Raina', 'Dravid'])
print(df)
결과: `delete` 및 `pop` 함수를 사용하여 열을 삭제할 수도 있습니다. 예를 들어, 위의 예제에서 ‘Matches played’ 열을 삭제하는 방법은 다음 두 가지 중 하나로 할 수 있습니다:
del df['Matches played']
또는
df.pop('Matches played')
결과:
결론
이 튜토리얼에서는 Python Pandas 라이브러리에 대해 간단히 소개했습니다. 또한 데이터 과학 분야에서 사용되는 Pandas 라이브러리의 강력함을 발휘하기 위해 실습 예제를 진행했습니다. 또한 Python 라이브러리의 다양한 데이터 구조에 대해서도 알아보았습니다. 참고: Pandas 공식 웹사이트
Source:
https://www.digitalocean.com/community/tutorials/python-pandas-module-tutorial