Today I Learned (2024-07-12) 🤔
목차
오늘 공부한 내용 🧑🏻💻
요약
내용이 너무 많다..
1. pandas(판다스)
판다스란?
- 파이썬 언어로 작성된 데이터를 분석 및 조작하기 위한 라이브러리
- 데이터 과학과 데이터 분석 분야에서 광범위하게 사용된다.
- 시리즈(Series)와 데이터프레임(DataFrame)이라는 객체를 가지고 있다.
판다스 설치
- 터미널에 아래의 명령어를 입력해서 설치한다.
pip install pandas
- 터미널에 아래의 명령어를 입력해서 설치한다.
판다스 데이터 객체 종류
1) Series 객체
- 1차원 데이터를 다루기 위한 객체이다.
DataFrame
객체에 열을 선택하여 추출할 수 있다.
2) DataFrame 객체
- 행과 열로 이루어진 2차원 데이터를 다루기 위한 객체이다.
- 열은 각각의 변수를 나타내고, 행은 각각의 관측치를 나타낸다.
- 여러 개의 열(Series)을 가지고 있다.
- 각 열은 서로 다른 데이터 타입을 가질 수 있다.
DataFrame 객체 생성하기
딕셔너리를 활용해서 생성
# pandas 모듈 불러오기 import pandas as pd # 데이터프레임 생성 weather_data = { "기온":[31,32.2,25.1,13,1.5], "날씨":["맑음","비옴","우박","흐림","천둥"] } weather_df = pd.DataFrame(weather_data) print(weather_df)
기온 날씨 0 31.0 맑음 1 32.2 비옴 2 25.1 우박 3 13.0 흐림 4 1.5 천둥
리스트 내부 딕셔너리 구조 활용
import pandas as pd data = [ {"기온": 32.2, "날씨": "추움"}, {"기온": 1, "날씨": "더움"}, {"기온": 50, "날씨": "너무더움"}, {"기온": 33, "날씨": "비"}, ] df = pd.DataFrame(data) print(df)
기온 날씨 0 32.2 추움 1 1.0 더움 2 50.0 너무더움 3 33.0 비
2. 데이터 불러오기
- CSV 파일 불러오기
df = pd.read_csv("경로/파일명.csv")
- Excel 파일 불러오기
df = pd.read_excel("경로/파일명.xlsx", sheet_name="시트명")
- JSON 파일 불러오기
df = pd.read_json("경로/파일명.json")
3. 데이터 확인하기
데이터프레임 미리보기
dataframe.head(n)
: 데이터프레임의 상위 n개의 행을 보여준다. 기본값은 5이다.dataframe.tail(n)
: 데이터프레임의 하위 n개의 행을 보여준다. 기본값은 5이다.
데이터프레임 구조 확인하기
dataframe.shape
: 데이터프레임의 행과 열의 수를 반환한다.shape = df.shape
(8, 5)
dataframe.dtypes
: 각 열의 데이터 타입을 반환한다.dtypes = df.dtypes
Name object Position object Office object Age int64 Salary int64 dtype: object
dataframe.info()
: 데이터프레임의 열, 열 별 데이터 타입, 결측치가 아닌 값의 수 등을 반환한다.info = df.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 8 entries, 0 to 7 Data columns (total 5 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Name 8 non-null object 1 Position 8 non-null object 2 Office 8 non-null object 3 Age 8 non-null int64 4 Salary 8 non-null int64 dtypes: int64(2), object(3) memory usage: 448.0+ bytes
- 행(index)와 열(column) 속성
dataframe.index
: 데이터프레임의 행 정보 속성index_info = df.index
RangeIndex(start=0, stop=8, step=1)
dataframe.columns
: 데이터프레임의 열 정보 속성columns = df.columnns
Index(['Name', 'Position', 'Office', 'Age', 'Salary'], dtype='object')
4. 데이터 정렬하기
값 기준 정렬
sort_values()
하나 이상의 열을 기준으로 데이터프레임의 행을 정렬한다.
오름차순 정렬
sorted_df = df.sort_values(by="Name")
5 David Smith Software Engineer New York 38 105000 4 Emily Clark Data Scientist San Francisco 30 115000 1 Jane Smith Data Scientist San Francisco 34 125000 0 John Doe Software Engineer New York 28 95000 3 Linda Taylor HR Specialist London 32 85000 6 Michael Brown HR Specialist London 41 90000 2 Peter Jones Project Manager Berlin 45 75000 7 Sarah Johnson Project Manager Berlin 29 80000
내림차순 정렬
sorted_df = df.sort_values(by="Name")
7 Sarah Johnson Project Manager Berlin 29 80000 2 Peter Jones Project Manager Berlin 45 75000 6 Michael Brown HR Specialist London 41 90000 3 Linda Taylor HR Specialist London 32 85000 0 John Doe Software Engineer New York 28 95000 1 Jane Smith Data Scientist San Francisco 34 125000 4 Emily Clark Data Scientist San Francisco 30 115000 5 David Smith Software Engineer New York 38 105000
2개 이상의 열을 기준으로 정렬
# Office 기준 오름차순, Salary 기준 내림차순 정렬 sorted_df = df.sort_values(by=['Office', 'Salary'], ascending=[True, False])
Name Position Office Age Salary 7 Sarah Johnson Project Manager Berlin 29 80000 2 Peter Jones Project Manager Berlin 45 75000 6 Michael Brown HR Specialist London 41 90000 3 Linda Taylor HR Specialist London 32 85000 5 David Smith Software Engineer New York 38 105000 0 John Doe Software Engineer New York 28 95000 1 Jane Smith Data Scientist San Francisco 34 125000 4 Emily Clark Data Scientist San Francisco 30 115000 # 오피스는 Berlin 이 오름차순으로 제일 먼저고, 그 중에서 salaray 는 내림차순이라 제일 높은 값으로 정렬된다.
인덱스 기준 정렬
sort_index()
- 인덱스를 기준으로 행을 정렬한다.
- 인덱스 재설정 후 원래 순서로 복원하고 싶을 때 유용하다
- 오름차순 정렬
# 인덱스를 기준으로 오름차순 정렬 sorted_df = df.sort_index()
Name Position Office Age Salary 0 John Doe Software Engineer New York 28 95000 1 Jane Smith Data Scientist San Francisco 34 125000 2 Peter Jones Project Manager Berlin 45 75000 3 Linda Taylor HR Specialist London 32 85000 4 Emily Clark Data Scientist San Francisco 30 115000 5 David Smith Software Engineer New York 38 105000 6 Michael Brown HR Specialist London 41 90000 7 Sarah Johnson Project Manager Berlin 29 80000
- 내림차순 정렬
# 인덱스를 기준으로 내림차순 정렬 sorted_df = df.sort_index(ascending=False)
Name Position Office Age Salary 7 Sarah Johnson Project Manager Berlin 29 80000 6 Michael Brown HR Specialist London 41 90000 5 David Smith Software Engineer New York 38 105000 4 Emily Clark Data Scientist San Francisco 30 115000 3 Linda Taylor HR Specialist London 32 85000 2 Peter Jones Project Manager Berlin 45 75000 1 Jane Smith Data Scientist San Francisco 34 125000 0 John Doe Software Engineer New York 28 95000
- 오름차순 정렬
5. 수치형 자료형
수치형 자료형이란?
- 값이 수치로 표현되는 자료를 의미한다.
- 산술 연산의 적용이 가능하며, 다양한 통계 기법을 적용할 수 있다.
수치형 자료형 구분
- 이산형 자료형 : 값이 정수처럼 명확하게 구분된 자료
- 1명, 2명, 3명, 1명 ...
- 1대, 2대, 5대, 111대 ...
- 연속형 자료형 : 특정 범위내 연속저으로 나오는 자료
- 171.1cm , 123.4cm, 151.4cm…
- 이산형 자료형 : 값이 정수처럼 명확하게 구분된 자료
관련 메서드
관련 메서드
기술 통계
dataframe.describe()
: 데이터 프레임의 각 열에 대한 기술 통계란(평균, 표준편차, 최소값, 최대값, 사분위수 등)을 요약해서 출력해준다.산술 연산이 가능한 자료형만 요약해준다.
df.describe()
Age Salary count 8.000000 8.000000 mean 34.625000 96250.000000 std 6.139742 17474.471175 min 28.000000 75000.000000 25% 29.750000 83750.000000 50% 33.000000 92500.000000 75% 38.750000 107500.000000 max 45.000000 125000.000000
평균
dataframe.mean()
각 열의 평균값을 계산한다.
dataframe.mean()
중앙값
dataframe.median()
각 열의 중앙값을 계산한다.
dataframe.median()
최빈값
dataframe.mode()
각 열의 최빈값을 계산한다.
데이터셋에서 가장 자주 등장하는 값을 찾는다.
dataframe.mode()
분산
dataframe.var()
각 열의 분산을 계산합니다.
데이터의 분포가 얼마나 넓게 퍼져 있는지 타나낸다.
dataframe.var()
표준편차
dataframe.std()
각 열의 표준편차를 계산합니다.
분산의 제곱근으로, 데이터의 분포가 얼마나 넓게 퍼져 있는지 나타낸다.
dataframe.std()
최대값과 최소값
dataframe.max()
&dataframe.min()
각 열의 최대값과 최소값을 계산한다.
dataframe.max() dataframe.min()
사분위수
quantile()
데이터의 분포를 사분위수로 나눈 값을 계산한다.
예를 들어, 25%, 50%, 75%의 위치에 있는 값을 구할 수 있다.
dataframe.quantile([0.25, 0.5, 0.75])
합계
sum()
각 열의 합계를 계산한다.
dataframe.sum()
10. 개수
- **`count()`**
- 각 열의 비결측치(non-NA/null) 값의 개수를 계산한다.
```python
dataframe.count()
```
6. 범주형 자료형
범주형 자료형이란?
- 값이 먗 개의 카테고리(범주)로 구분되는 데이터 유형을 의미한다.
- 수치적 연산이 아닌 그룹으로 나누어진다.
- 정렬이나 산술 연산은 의미가 없으며 분류 작업에 사용한다.
범주형 데이터 구분
- 명목형 데이터(Nominal Data) : 순서가 없는 범주형 데이터
- 성별, 혈액형, 국가
- 순서형 데이터(Ordinal Data) : 순서가 있는 범주형 데이터
- 학점, 만족도
- 명목형 데이터(Nominal Data) : 순서가 없는 범주형 데이터
범주형 데이터 다루기
고유값 확인하기
unique()
메서드Series에서 중복을 제거한 유니크한 값들의 배열을 반환한다.
DataFrame 객체에는 직접 사용할 수 없으며, 데이터 프레임의
열
에 대해 사용 가능하다.df['Brand'].unique()
array(['Apple', 'Samsung', 'Xiaomi'], dtype=object)
고유값 갯수
nunique()
메서드- 중복을 제거한 유니크한 값들의 개수를 반환한다.
# 열 기준 유니크한 값의 개수 df.nunique()
Brand 3 Model 7 Release 2 dtype: int64
열 개수 카운트
value_counts()
메서드- 각 열에서 유니크한 값이 나타나는 횟수를 반환한다.
- 데이터의 분포를 이해하는 데 유용하며
열
에 대해 사용 가능하다.
df['Brand'].value_counts()
Samsung 3 Apple 2 Xiaomi 2 Name: Brand, dtype: int64
값 정규화 시키기
normalize = True
인자각 값이 차지하고 있는 비중을 확인할 수 있다.
df['Brand'].value_counts(normalize=True) # 결과 # Samsung 0.428571 # Apple 0.285714 # Xiaomi 0.285714 # Name: Brand, dtype: float64
7. 데이터 선택하기
인덱싱(indexing)
- 데이터프레임이나 시리즈에서 특정 행이나 열을 선택하기 위해 사용된다.
인덱싱 방법
[]
: 단순 열 선택.loc[]
: 레이블 기반 선택iloc[]
: 인덱스 기반 선택
열 선택
DataFrame에서 열 선택을 하는 가장 기본적인 방법
DataFrame[열 이름]
: 단일 선택DataFrame[[
열 1,'열 2]]` : 복수 선택# 단일 열 선택 df['열 이름'] # 여러 열 선택 df[['열 이름 1', '열 이름 2', ...]]
인덱싱 : loc
레이블(label) 또는 논리적인 이름을 사용하여 데이터 프레임의 행이나 열을 선택한다.
인덱스의 이름이나 열의 이름을 기반으로 데이터를 선택할 수 있다.
리스트처럼 슬라이싱이 가능하지만 리스트와 다르게
종료 인덱스를 포함한다.
기본 사용법
DataFrame.loc[행 이름, 열 이름]
: 단일 선택DataFrame.loc[시작 행 : 종료 행, 열 이름 : 종료 열 이름]
: 범위 선택# 단일 행 선택 df.loc['선택하고자 하는 행 이름'] # 복수 행 선택 df.loc[['행 이름 1', '행 이름 2', '행 이름 3'], : ] # 단일 열 선택 df.loc[:, '선택하고자 하는 열 이름'] # 복수 열 선택 df.loc[:, ['열 이름 1', '열 이름 2', '열 이름 3']] # 단일 데이터 선택 df.loc['선택하고자 하는 행 이름', '선택하고자 하는 열 이름'] # 모든 열 선택, 행 범위 지정 선택 df.loc['시작 행 이름' : '종료 행 이름', :] # 모든 행 선택, 열 범위 지정 선택 df.loc[:, '시작 열 이름' : '종료 열 이름'] # 행열 범위 지정 선택 df.loc['시작 행 이름' : '종료 행 이름', '시작 열 이름' : '종료 열 이름']
인덱싱 : iloc
- 정수 기반의 위치 인덱싱을 사용하여 데이터프레임의 행이나 열을 선택한다.
- 행과 열의 순서(정수 위치)를 기반으로 데이터를 선택할 수 있다.
- 리스트처럼 슬라이싱이 가능하며 리스트처럼
종료 인덱스 값을 포함하지 않는다.
- 기본 사용법
DataFrame.iloc[행 번호, 열 번호]
: 단일 선택DataFrame.iloc[행 번호 : 끝 행, 시작 열 번호 : 끝 열 번호]
: 범위 선택
8. 필터링(filtering)
필터링(filtering)이란?
- 데이터프레임에서 특정 조건을 만족하는
행(row)
을 선택하기 위해 사용된다. - 조건식을 기반으로 하여, 해당 조건을 만족하는 데이터만을 추출하는 과정이다.
- 불리언(Boolean) 인덱싱을 주로 사용한다. 조건식 결과가
True
인 행만 선택한다.
- 데이터프레임에서 특정 조건을 만족하는
단일 조건 필터링
조건 필터링을 통해 특정 조건을 만족하는 데이터만 선택할 수 있다.
# 'Position'이 'Data Scientist'인 행만 필터링 filtered_df = df[df["Position"] == "Data Scientist"]
# 'Age' 열이 30 보다 큰 모든 행 선택 filtered_df = df[df['Age'] > 30]
복수 조건 필터링
- 복수의 조건을
&
(AND)나|
(OR)을 사용하여 결합할 수 있습니다. - 각 조건은 괄호로 묶어야 합니다.
# 'Position'이 'Software Engineer'이고 'Age'가 30 보다 큰 행 필터링 filtered_df = df[(df['Position'] == 'Software Engineer') & (df['Age'] > 30)]
- 복수의 조건을
isin 필터링
- 특정 열 값을 가진 행만 선택합니다.
# 'Position'이 'Data Scientist' 또는 'HR Specialist'인 행 필터링 filtered_df = df[df['Position'].isin(['Data Scientist', 'HR Specialist'])]
- 특정 열 값을 가진 행만 선택합니다.
9. 데이터 조작하기
수정하기
단일 값 수정하기
loc
나iloc
를 사용해 특정 셀에 접근하여 값을 변경한다.import pandas as pd # 데이터 프레임 생성 df = pd.DataFrame({"A":[1,2,3],"B":[4,5,6]}) # 'A' 열의 첫 번째 행 값을 100으로 변경 df.loc[0, 'A'] =100 df
A B 0 100 4 1 2 5 2 3 6
열 기반으로 값 수정하기
특정 열의 모든 값을 새로운 값으로 변경하고 싶을 때는, 열을 선택하고 값을 할당한다.
# 'B' 열의 모든 값을 10으로 변경 df['B'] = 10 df
A B 0 100 10 1 2 10 2 3 10
조건을 기반으로 한 값 수정
데이터 프레임에서 조건을 만족하는 셀만 선택하여 값을 변경한다.
# 'A' 열의 값이 100 이상인 행의 'B' 열 값을 50으로 변경 df.loc[df['A']>=100,'B'] = 50 df
A B 0 100 50 1 2 10 2 3 10
이름 수정하기
rename()
메서드새로운 이름을 지정하는 딕셔너리 인자가 필요하다.
딕셔너리 key 에는 기존 이름, vlaue 에는 새로운 이름을 작성한다.
# 열 이름 변경 df.rename(columns={"A":"바꾼이름이다"},inplace=True) df
바꾼이름이다 B 0 100 50 1 2 10 2 3 10
inplace
- 수정한 데이터 프레임을 기존 데이터 프레임에 반영할지 새로운 데이터 프레임을 반환할지 선택하는 인자.
- 기본은
False
만약,inplace=True
를 하면 데이트프레임 객체에 그대로 반영된다.
columns / index
- 행과 열 중 변경할 것을 선택한다.
자료형 수정하기
astype()
새로운 데이터 타입을 인자로 받아서 해당 열의 모든 값을 지정된 데이터 타입으로 변환한디.
new_df = pd.DataFrame({"A": [1, 2, 3], "B": [4.5, 5.5, 6.4]}) # 'A' 열을 float 로 변경하기 new_df['A'] = new_df['A'].astype(float) new_df
A B 0 1.0 4.5 1 2.0 5.5 2 3.0 6.4
추가하기
새로운 행 추가하기
loc
인덱싱을 활용해서 직접 추가새로운 행을 만들고, 데이터를 입력해서 행을 추가할 수 있다.
df = pd.DataFrame({"A": [1, 2, 3], "B": [4.5, 5.5, 6.4]}) df.loc[3, :] = [10,10] df
A B 0 1.0 4.5 1 2.0 5.5 2 3.0 6.4 3 10.0 10.0
새로운 열 추가하기
직접 할당을 통한 새 열 추가
새로운 열 이름을 지정하고 값을 할당함으로써 쉽게 추가할 수 있습니다.
df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]}) # "C"라는 새로운 열 추가하고 모든 값에 10 할당 df["C"] = 10
A B C 0 1 4 10 1 2 5 10 2 3 6 10
조건에 따른 새로운 열 추가
조건식을 사용하여 새 열의 값을 조건에 따라 다르게 설정할 수 있습니다.
# 새로운 E열을 생성하고, 조건을 만족함에 따라 값을 대입 # 조건("A"열의 값이 3 이상)을 만족하면 E열의 값이 True, 아닐경우 False df["E"] = df["A"] >= 3
A B C E 0 1 4 10 False 1 2 5 10 False 2 3 6 10 True
삭제하기
데이터 삭제하기drop()
메서드특정 행 또는 열을 삭제할 수 있습니다.
# 열 삭제하기 df.drop(columns=["열 이름 1", ...], inplace=True) # 행 삭제하기 df.drop(index=["행 이름 1", ...], inplace=True)
어려웠던 내용 📚
- 행과 열이 계속 헷갈린다... 아이고 🤦🏻♂️
궁금한 내용과 부족한 내용 🙋🏻
- 판다스 메소드들?
느낀 점 💡
- 배운 내용이 많다보니까 정리할 내용이 너무 많다... 증말
- 내가 잘 정리한건지도 모르겠다
- 일단 정리를 하긴 했는데 솔직히 외웠다면 거짓말이지 판다스 또한 쓰면서 익혀야지
- 일단 정리한 노션 링크는 첨부해야겠다. 노션
'TIL (2024) > 2024.07' 카테고리의 다른 글
[TIL] 2024-07-21 (0) | 2024.07.21 |
---|---|
[TIL] 2024-07-20 (2) | 2024.07.21 |
[TIL] 2024-07-18 (3) | 2024.07.19 |
[TIL] 2024-07-17 (0) | 2024.07.17 |
[TIL] 2024-07-16 (0) | 2024.07.17 |
배움에 즐거움을 느끼는 마네의 연구소입니다. 이미지 출처 : https://www.instagram.com/hoseobiiiiiii._.0410/
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!