목차
- 판다스(Pandas )
- 1-1. Series와 Dataframe
- CSV파일 다루기
- 엑셀파일 읽어오기
- 데이터프레임 기본정보 알아보기
- 4-1. 열(column)다루기
- 4-2. 통계정보 알아보기
- 4-3. 형태(shape)알아보기
- 4-4. 원하는 개수의 데이터 보기
- 4-5. 정렬하기
- 데이터 다루기
- 5-1. 범위 선택
- Boolean Indexing
- isin
1. 판다스(Pandas)
- 판다스는 파이썬에서 데이터 조작과 분석을 위해 '웨스 맥키니'가 개발한 라이브러리이다
- 데이터 구조(data frame)와 데이터 조작 기능을 제공하여 데이터 처리 작업을 효율적으로 수행할 수 있게 도와준다
- 판다스의 핵심 데이터 구조는 '시리즈(Series)'와 '데이터프레임(DataFrame)'이다
- 판다스는 데이터 처리 작업을 효율적으로 수행하기 위해 NumPy와 함께 사용되는 경우가 많다. (NumPy는 다차원 배열을 다루는 기능을 제공하는 라이브러리다)
# 판다스 설치하기 / import 하기
!pip install pandas
import pandas as pd
(나는 구글코랩에서 하기때문에 설치는 따로 할 필요 없고 그냥 import만 하면 되긴 함)
1-1. Series와 Dataframe
- 시리즈(Series)
- 판다스에서 제공하는 데이터 구조 중 하나로, 일련의 값(value)과 인덱스(index)로 구성된 1차원 배열이다 => 1차원 표
- 시리즈는 각 값에 대해 고유한 인덱스를 가지며, 이 인덱스를 사용해 각 값에 접근할 수 있다
- 시리즈의 인덱스는 기본적으로 정수로 지정되지만, 필요에 따라 사용자가 임의의 값이나 레이블을 인덱스로 지정할 수 도 있다
- 시리즈를 생성하기 위해서는 판다스의 Series 클래스를 사용한다
- 데이터프레임(DataFrame)
- 판다스에서 제공하는 데이터구조 중 가장 중요하고 자주 사용되는 구조다
- 데이터프레임은 값(value)과 인덱스(index) 그리고 열(columns)로 구성된 2차원 테이블로, 행은 개별 데이터 레코드를 나타내고 열은 각 데이터의 특성을 나타낸다
- 데이터프레임은 엑셀 스프레드시트나 SQL테이블과 유사한 형태로 데이터를 조작하고 분석할 수 있다
데이터프레임과 시리즈의 값은 넘파이의 ndarray기반이다
# 2차원 배열 데이터 만들기
data1 = [[67, 93, 91],
[75, 69, 96],
[75, 81, 82],
[62, 70, 75],
[98, 45, 87]]
# 인덱스 만들기
idx1= ['김사과', '반하나', '오렌지', '이메론', '배에리']
# 컬럼 만들기
col1= ['국어', '영어', '수학']
# 판다스의 데이터프레임에 위에 만든 데이터 넣어보기
pd.DataFrame(data1)
>> DataFrame에는 데이터, 인덱스, 컬럼이 들어간다.
지금은 아까 만들어둔 데이터만 들어갔기 때문에 인덱스와 컬럼 자리가 비어있어서 그냥 정수가 들어가있는 것을 볼 수있다.
# 이번에는 데이터, 인덱스, 컬럼 모두 넣어보기
pd.DataFrame(data1, idx1, col1)
>> 만들어둔 리스트들이 각각 인덱스와 컬럼자리에 들어간 것을 볼 수 있다!
순서를 지켜서 넣어주어야 한다! 중요*
# 넣을 값이 두개밖에 없는 경우에는 값이 들어갈 자리를 써준다
pd.DataFrame(data=data1, columns=col1)
>> 각각 데이터와 컬럼이 자기 자리에 들어간 것을 볼 수 있다.
그리고 위 방식으로 쓸때는 순서를 지키지 않아도 된다.
# 변수에 담아주기
df1= pd.DataFrame(data1, idx1, col1)
# 데이터프레임에서 값 뽑기
df1.values
>> 값만 뽑히는 것을 볼 수 있다
# 인덱스만 뽑기
df1.index
>> 타입이 object형이면 그냥 문자형이라고 생각하면 된다
# 컬럼만 뽑기
df1.columns
# 1차원 배열 만들기
data2= [67, 75, 75, 62, 98]
# 판다스의 시리즈에 데이터 넣어보기
pd.Series(data2)
>> 시리즈는 데이터와 인덱스로 이루어진 1차원 표!
데이터만 넣었더니 인덱스가 자동으로 붙고 일렬로 나오는 것을 볼 수 있다
# 데이터와 인덱스 넣어보기
pd.Series(data2, idx1)
# 시리즈에서 값 뽑아보기
se1.values
# 인덱스만 뽑아보기
se1.index
# 딕셔너리를 사용해서 데이터프레임 생성해보기
딕셔너리 형태로 data를 만들어준다. 각 열의 이름을 키(key)로, 해당 열의 데이터를 값(value)로 가지고 있다
dic1= {
'국어':[67, 75, 75, 62, 98],
'영어':[93, 69, 81, 70, 45],
'수학':[91, 96, 82, 75, 87]
}
# 데이터프레임에 딕셔너리와 인덱스 넣어주기
df2= pd.DataFrame(data=dic1, index=idx1)
df2
>> 딕셔너리의 key: value가 각각 column과 value 자리에 들어간 것을 볼 수 있다
2. CSV 파일 다루기
- CSV(Comma-Separated Values) 파일: 데이터를 쉼표(,)로 구분하여 저장하는 텍스트 파일 형식
- CSV파일은 테이블형태의 데이터를 저장하기 위해 사용되고, 여러 프로그램과 시스템간에 데이터를 공유하고 이동하는 데 많이 활용된다
- 엑셀로 로딩할 수 도 있지만 쉼표로 구분된 CSV가 더 가볍기 때문에 데이터로 많이 사용한다
- CSV파일은 행과 열로 구성된 데이터를 저장하는데, 각 행은 개별 데이터 레코드를 나타내고 각 열은 데이터의 특성을 나타낸다
- 판다스는 CSV파일을 읽고 쓰는 기능을 제공한다
- read_csv( ) 함수를 사용해 CSV파일을 데이터프레임으로 읽을 수 있다
- to_csv( ) 함수를 사용해 데이터프레임을 CSV파일로 저장할 수 있다
CSV 포멧의 파일을 제공하는 [공공데이터 포털](https://www.data.go.kr)
CSV파일을 읽고 쓰는 예시
import pandas as pd
# CSV 파일 읽기
df = pd.read_csv('data.csv')
# 데이터프레임 확인
print(df)
# CSV 파일 저장
df.to_csv('new_data.csv', index=False)
▼학습에 사용할 파일
# 파일 인코딩 방법
pd.read_csv('korean-idol.csv')
# 경로를 써줘서 불러올수도 있다
pd.read_csv('/content/drive/MyDrive/데이터 분석/korean-idol.csv')
3. 엑셀파일 읽어오기
▼위와 똑같은 내용을 담고있는 엑셀파일!
# 파일을 넣어둔 경로로 엑셀파일 불러오기
pd.read_excel('/content/drive/MyDrive/데이터 분석/korean-idol.xlsx')
4. 데이터프레임 기본정보 알아보기
df= pd.read_csv('http://bit.ly/ds-korean-idol')
type(df)
>> type() 를 사용해 타입을 확인할 수 있다
# info( ): 기본적인 행, 열의 정보와 데이터 타입을 반환해준다
df.info()
4-1. 열(column)다루기
# 현재 파일의 column 값 확인하기
df.columns
# 새로운 column명을 담은 리스트 만들어주고, df.columns 에 새로 만든 컬럼명을 넣어주기
new_column = ['name', 'group', 'company', 'gender', 'birthday', 'height', 'blood', 'brand']
df.columns = new_column
# 그 후에 컬럼을 확인해보면 바뀌어있는 것을 확인할 수 있다
df.columns
4-2. 통계정보 알아보기
# describe( ): 통계 정보를 출력한다. 수치 정보만 가져올 수 있다!
df.describe()
# 포함하고싶은 타입을 넣어서 출력할수도 있다
df.describe(include=object)
4-3. 형태(shape)알아보기
df.shape
>> 15행 8열임을 알 수 있다
4-4. 원하는 개수의 데이터 보기
- head(): 상위 5개의 row를 출력
- head(n): 상위 n개의 row를 출력
- tail(): 하위 5개의 row를 출력
- tail(n): 하위 n개의 row를 출력
# head( )
df.head()
0 부터 4까지 5개를 불러온 모습을 볼수있다!
# head(n)
df.head(7)
0 부터 6까지 7개를 불러온 모습을 볼수있다!
# df.tail( )
df.tail()
10 부터 14까지 5개를 불러온 모습을 볼수있다!
# df.tail(3)
df.tail(3)
12 부터 14까지 3개의 데이터를 불러온 모습을 볼 수 있다!
4-5. 정렬하기
# 인덱스로 오름차순 정렬하기 (기본값임)
df.sort_index()
# 인덱스로 내림차순 정렬하기
df.sort_index(ascending=False)
인덱스 내림차순 정렬된 모습을 볼 수 있다
# 값에 따른 오름차순 정렬
df.sort_values(by= 'height')
height를 기준으로 오름차순
키가 작은 키부터 큰키까지 정렬되어 있는 모습을 볼수있다!
# 값에 따른 내림차순 정렬
df.sort_values(by= 'height', ascending=False)
키가 큰 키부터 작은 키까지 정렬되어 있는 모습을 볼수있다!
# NaN을 가장 위로 올려두기: na_position의 기본값은 맨 아래
df.sort_values(by='height', na_position='first')
# 한가지 이상의 기준으로 정렬하기
df.sort_values(by= ['height', 'brand'], ascending=[False, True], na_position='first')
1차 정렬은 키 내림차순으로, 2차 정렬은 브랜드 오름차순으로 한다
그리고 파이썬에서는 두개 이상을 쓸때는 리스트로 적는다!
키 내림차순으로 정렬후 키가 같은 경우에는 브랜드 오름차순으로 정렬했음을 볼 수 있다
5. 데이터 다루기
# 데이터프레임에서 원하는 컬럼의 값만 가져오기
df['blood']
# 타입 찍어보기
type(df['blood'])
타입을 찍어보면 값과 인덱스만 있으므로 시리즈가 나오는 것을 볼수있다
type(df.blood)
이렇게 해도 같은 값이 나오는 것을 알 수 있다
5-1. 범위 선택
# 위에서 세개만 선택하는 방법
df.head(3)
df[:3]
head를 써도 슬라이싱을 써도 같은 결과가 나온다
# loc 인덱싱
: loc인덱싱은 판다스에서 데이터프레임이나 시리즈의 특정 행이나 열에 접근하기 위해 사용되는 인덱싱 방법 중 하나다. loc 인덱서를 사용하면 라벨(label)을 기반으로 데이터를 선택할 수 있다.
데이터프레임에서 인덱싱을 사용하려면 loc[ ] 을 사용하고 인덱서 안에 행과 열의 라벨을 지정한다.
행 인덱스와 열 인덱스에 숫자 대신 문자열 또는 사용자 지정 라벨을 사용하는 경우, loc인덱싱은 특히 유용하다.
df.loc[:, 'name']
# 레이블(이름) 인덱싱, 행과 열 모두 인덱싱과 슬라이싱이 가능
# 위의 경우 모든 행의 name 값을 가져오게됨
df.loc[2:5, 'name']
# 라벨 기반 인덱싱인 loc인덱싱을 사용
# 데이터프레임 'df'에서 'name'열에 있는 인덱스 2부터 5까지에 해당하는 행의 값을 선택하는 코드!
df.loc[:, ['name', 'gender', 'height']]
# 'name', 'gender', 'height'열에서 모든 행을 가져오기
# loc인덱싱은 열(column)도 인덱싱 할 수 있다
df.loc[3:8, 'name':'gender']
# 'name'부터 'gender'열까지 3행부터터 8행까지 불러오기
# iloc : 데이터프레임에서 위치 기반 인덱싱을 사용하여 특정 행과 열을 선택하는 메서드. 정수 인덱스를 기반으로 행과 열을 선택할 수있다.
df.iloc[:, [0, 2]]
# 첫번째 열[0]과 세번째 열[2]에 해당하는모든 행을 선택하여 반환한다
위에서는 인덱스 0과 인덱스 2를 선택한거지만 대괄호를 제거하면 0부터 2앞까지의(0부터 1까지) 열을 선택한다!
df.iloc[:,0:2]
# 2번 컬럼을 포함하지 않음
# 행과 열에 전부 적용 가능하다
df.iloc[1:3, 2:4]
# 행 1부터 2까지, 열 2부터 3까지
6. Boolean Indexing
- 불리언 인덱싱은 불리언 조건을 사용하여 데이터프레임에서 특정 조건을 만족하는 행을 선택하는 방법이다. 조건은 불리언 시리즈로 표현되며, 이 시리즈는 데이터프레임의 행 수와 동일한 길이를가져야 한다.
- 일반적인 사용형식: df[조건식] 여기서 조건식은 데이터프레임의 각 행에 대해 참(True) 또는 거짓(False)값을 가지는 불리언 시리즈다.
# 1. 조건에 해당하는지 여부를 나타내는 불리언 시리즈를 생성하는 코드
df['height']>=180
# 2. 조건에 해당하는 행들만 선택하는 코드
df[df['height']>=180]
위의 두 코드의 차이는 반환하는 결과의 형태다. 1은 단순히 불리언 시리즈를 반환하는 반면, 2는 조건을 만족하는 행들로 이루어진 새로운 데이터프레임을 반환한다.
# 조건 추가
df['name'][df['height']>=180]
>> height열에서 180 이상인 행들을 선택한 후, 해당 행들의 name열의 값을반환하는 코드.
df['height']>=180 로 불리언 시리즈를 생성한 후 , 해당 행들의 name열의 값을 반환한다.
df[['name', 'gender', 'height']][df['height']>=180]
>> height열에서 180 이상인 행들을 선택한 후, 해당 행들의 name, gender, height열의 값을반환하는 코드. df['height']>=180 로 불리언 시리즈를 생성한 후 , 해당 행들의 name, gender, height열의 값을 반환한다.
df.loc[df['height']>=180 ,['name', 'gender', 'height']]
>> 위의 코드와 결과적으로 동일한 결과를 반환한다.
차이점은 사용하는 인덱싱 방식에 있다. loc 인덱서를 사용하여 한번에 조건과 열을지정한다. 일반적으로는 loc인덱서를 사용해 조건과 열을 동시에 지정하는 방법이 더 효율적이다.
7. isin
- isin은 데이터프레임에서 열의값이 주어진리스트나 시리즈에 포함되는지 여부를 확인하는 메서드다
- 이 메서드를 사용하면 데이터프레임의 특정 열에서 여러 값을 동시에 비교할 수 있다
- isin메서드의 일반적인 사용형식: df['열이름'].isin(값들)
# 먼저 데이터프레임을 찍어본다
df
# 변수에 회사명 담은 후 company열에서 플레디스 또는 SM 값을 포함하는지 여부를 확인
company= ['플레디스','SM']
df['company'].isin(company)
>> 불리언 시리즈가 반환된다.
df[df['company'].isin(company)]
>> 위에서 생성한 불리언 시리즈를 사용해 원본 데이터프레임 df 에서 조건을 만족하는 행들만 선택한 결과를 반환한다.
df.loc[df['company'].isin(company)]
>> loc 인덱서를 사용해 조건을 만족하는 행들을 선택한다. (= True인 행들만) 해당 행들에 대한 모든 열의 값을 반환한다.
'KDT 수업 > Python' 카테고리의 다른 글
[머신러닝 딥러닝] 사이킷런 Scikit-learn 모듈 (2) | 2023.06.19 |
---|---|
[머신러닝 딥러닝] 인공지능 / 머신러닝 (0) | 2023.06.18 |
[데이터분석] 행렬연산 (0) | 2023.06.08 |
[데이터분석] NUMPY 넘파이 (0) | 2023.05.30 |
28. DB를 이용한 단어장 만들기 (0) | 2023.03.22 |