파이썬 - Pandas를 활용한 데이터 필터링(1)

hyun-jin·2025년 3월 12일

데이터 분석

목록 보기
18/100
post-thumbnail

데이터 분석 16일차

1. Pandas import하는걸로 시작!

  • 기본으로pandasnumpy import 하는걸로 시작하기
import pandas as pd
import numpy as np
import time #<- 결과나오는 시간 확인 가능한 라이브러리
  • time 활용법(%%time)
%%time
sum = 0
for x in range(10000000):
  sum = sum+x
print('1부터 1000만까지 합:',sum)

✔️출력:
1부터 1000만까지 합: 49999995000000
CPU times: user 1.19 s, sys: 786 µs, total: 1.19 s
Wall time: 1.2 s


2. DataFrame 만들기

1️⃣ 리스트 활용하여 DataFrame 생성

import pandas as pd
# 리스트 활용
data1 = [['Lee', 28, 'Seoul'], ['Park', 35, 'Busan'], ['Yoon', 40, 'Incheon']]
df1 = pd.DataFrame(data1, columns=['Name', 'Age', 'City'])
print(df1)

✔️출력:
Name Age City
0 Lee 28 Seoul
1 Park 35 Busan
2 Yoon 40 Incheon

2️⃣ Dictionary 활용하여 DataFrame 생성

# 딕셔너리 활용
data2 = {'Name': ['Lee', 'Park', 'Yoon'], 'Age': [28, 35, 40], 'City': ['Seoul', 'Busan', 'Incheon']}
df2 = pd.DataFrame(data2)
print(df2)

✔️출력:
Name Age City
0 Lee 28 Seoul
1 Park 35 Busan
2 Yoon 40 Incheon

✅리스트 활용 방식: data1에서 각 행을 리스트로 저장, 컬럼을 별도로 지정.
✅딕셔너리 활용 방식: 키가 컬럼명, 값이 리스트 형태로 저장됨.


3. CSV 파일을 통한 테이블 Load

  • CSV 파일 불러오기
df = pd.read_csv("product_details.csv")
df2 = pd.read_csv("customer_details.csv")
df3 = pd.read_csv("E-commerece sales data 2024.csv")

4. 테이블 확인법

  • 3개 다 출력 할때
    - display로 출력해야 표 형식으로 잘 나옴, print로 하면 별루야...
display(df,df2, df3)
  • 테이블 하나만 출력, 테이블의 첫 5줄 또는 마지막 5줄 출력
#데이블 하나만 가져 올때는 그냥 display 사용하지 않고 df로 바로 호출 가능
df
df.head()  # 처음 5줄만 출력
df.tail()  # 마지막 5줄만 출력

5. 테이블 파악하기

1️⃣ 테이블 행(가로)길이 파악하기

len(df), len(df2), len(df3)

2️⃣ 테이블의 데이터 구조를 파악하는 다양한 방법

shape: 테이블의 행과 열의 갯수를 반환 (행 개수, 열 개수)
dtypes: 테이블 내 컬럼타입(문자형, 숫자형, 배열 등) 확인
columns: 테이블 내 컬럼 확인
values: 테이블 내 각 행들을 배열 형태로 확인

"데이블 열과 행 갯수", df.shape, "데이블 컬럼 타임", df.dtypes, '테이블 컬럼 확인', df.columns, '테이블 행 상세확인',df.values

3️⃣ 테이블 컬럼을 리스트(to_list())로 확인하기

#df.columns    # 그냥 나열만 됨
df.columns.to_list()    # 리스트로 출력 해줌

4️⃣ 테이블 기본 구조 한눈에 확인하기

🚀 테이블 정보!!
🚀 컬럼의 타입과 결측치 데이터 타입 확인가능

df.info()  #컬럼명.info()

5️⃣ 테이블 행렬 전화

  • T함수 사용
df.T   #컬럼명.T

6️⃣ 테이블 계산

  • describe():전체 행 개수, 평균, 표준편차, 최솟값, 사분위수, 최댓값 확인
  • 싹 한꺼번에 계산해서 보여줌
df2.describe()  #컬럼명.describe()

7️⃣ 컬럼별로 결측치(데이터가 없는) 확인하기

  • 데이터 없는게 몇개인지 확인
#컬럼명.isnall().sum()
#df.isna() 		 #그냥 데이터가 있다 없다로 False/True로 데이터가 바뀜
#df.isna().sum() #sum()까지 해줘야 합계를 줌 (count처럼)
df.isnull().sum() #isna랑 동일, 이렇게 적어도됨 

8️⃣ 특정 컬럼 가져오기

🚀 방법1: 속성, 사용

df.Category

🚀 방법2: [] 연산자 사용

df['Category']

🚀방법3: iloc 사용

#: 은 모든 행을 가져오겠다는 의미, DataFrame의 인덱스 번호 4번(카테고리)컬럼을 가져오겠다는 의미
df.iloc[:,4]

9️⃣ 특정 컬럼 여러개 가져오기

🚀방법1: [[]] 사용

df[['Category','Selling Price']]

🚀 방법2: iloc 사용

# : 은 모든 행을 가져오겠다는 의미이며 dataframe 의 인덱스 번호 4번,7번 컬럼을 가져오겠다는 희미
df.iloc[:,[4,7]]

🔟 특정 컬럼 버리기

  • axis=0 은 인덱스 기준, 1은 컬럼 기준 삭제를 의미
  • inplace=True 는 원본을 변경하겠다는 의미, False 의 경우 원본테이블은 변경되지 않음
df3.drop('Interaction type', axis=1, inplace=True)  
# 다시 복원라려면 df3에 테이블 다시 넣어주기

6. 데이터 필터링

1️⃣ 조건에 부함하는 데이터 가져오기1

✅ 조건에 만족하면 정상출력하고, 아닌 행은 NaN으로 반환

  • 컬럼명.where(조건)
df.where(df2['Age']>50)

2️⃣ 조건에 부함하는 데이터 가져오기2

✅ 조건에 부합하는 데이터만 가져오고 싶을때

  • 특정 조건을 만족하는 데이터만 필터링하는 방법을 "Boolean Masking"
  • 또는 간단히 "Mask" 라고 부른다.
a = ((df2['Age']>50) & (df2['Gender']== 'Male'))
df2[a]

✔️ mask는 True 또는 False 값을 가지는 Boolean Series입니다.
✔️ df2[a]를 사용하면 True인 행만 필터링됩니다.


7. 데이터 그루핑(group by)

1️⃣ df2 테이블을 활용한 gender 기준 customer id count하기

  • SQL 활용
select Gender, count(Customer ID)
from df2
group by Gender
  • Python 활용
df2.groupby('Gender')['Customer ID'].count()

2️⃣ df2 테이블을 활용한 gender,Location 기준 customer id count하기

  • SQL 활용
select Gender, Location, count(Customer ID)
from df2
group by Gender, Location
  • Python 활용
df2.groupby(['Gender','Location'])['Customer ID'].count()

3️⃣ df2 테이블을 활용한 Location 기준 Age distinct count하기

  • SQL 활용
select Location, count(distinct Age)
from df2
group by Location
  • Python 활용
# count는 중복제거를 하지 않고, unique 는 중복을 제거합니다.
df2.groupby('Location')['Age'].unique()
# count랑 비교해보기
#df2.groupby('Location')['Age'].count()

4️⃣ df2 테이블을 활용한 Location 기준 Age distinct count 및 정렬

  • SQL 활용
select Location, count(distinct Age) as cnt
from df2
group by Location
order by cnt desc
  • Python 활용
#sort_valuse 사용시, ascending=True 는 오름차순, False 는 내림차순
df2.groupby('Location')['Age'].count().sort_values(ascending=False)

🚨 언제()를 쓰고 언제[]를 쓰고 또 어쩔땐 ()도 쓰지 않는게 헷갈린다...


🔥추가 정리!

📌 ()[] 사용 정리

유형설명예시
() 사용함수(메서드) 실행df.head(), df.mean()
[] 사용특정 컬럼/행 선택df['Age'], df.iloc[0]
() 없이 사용속성(attribute) 접근df.shape, df.columns

📌 헷갈리는 포인트 정리

  1. 함수 실행 시 () 필수

    • df.head() (⭕ 실행됨)
    • df.head (❌ 실행 안 됨, 함수 객체만 반환됨)
  2. 데이터 선택은 [] 사용

    • df['Age'] → 특정 컬럼 선택
    • df[['Age', 'Name']] → 여러 개의 컬럼 선택
    • df.iloc[0] → 첫 번째 행 선택
  3. 속성 접근 시 () 없음

    • df.shape, df.columns처럼 속성을 가져올 때는 () 없이 사용

0개의 댓글