데이터 분석 16일차
pandas와 numpy import 하는걸로 시작하기import pandas as pd import numpy as np import 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
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
# 딕셔너리 활용 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에서 각 행을 리스트로 저장, 컬럼을 별도로 지정.
✅딕셔너리 활용 방식: 키가 컬럼명, 값이 리스트 형태로 저장됨.
df = pd.read_csv("product_details.csv") df2 = pd.read_csv("customer_details.csv") df3 = pd.read_csv("E-commerece sales data 2024.csv")
display(df,df2, df3)
#데이블 하나만 가져 올때는 그냥 display 사용하지 않고 df로 바로 호출 가능 df df.head() # 처음 5줄만 출력 df.tail() # 마지막 5줄만 출력
len(df), len(df2), len(df3)
✅ shape: 테이블의 행과 열의 갯수를 반환 (행 개수, 열 개수)
✅ dtypes: 테이블 내 컬럼타입(문자형, 숫자형, 배열 등) 확인
✅ columns: 테이블 내 컬럼 확인
✅ values: 테이블 내 각 행들을 배열 형태로 확인
"데이블 열과 행 갯수", df.shape, "데이블 컬럼 타임", df.dtypes, '테이블 컬럼 확인', df.columns, '테이블 행 상세확인',df.values
#df.columns # 그냥 나열만 됨 df.columns.to_list() # 리스트로 출력 해줌
🚀 테이블 정보!!
🚀 컬럼의 타입과 결측치 데이터 타입 확인가능
df.info() #컬럼명.info()
df.T #컬럼명.T
df2.describe() #컬럼명.describe()
#컬럼명.isnall().sum() #df.isna() #그냥 데이터가 있다 없다로 False/True로 데이터가 바뀜 #df.isna().sum() #sum()까지 해줘야 합계를 줌 (count처럼) df.isnull().sum() #isna랑 동일, 이렇게 적어도됨
🚀 방법1: 속성, 사용
df.Category
🚀 방법2: [] 연산자 사용
df['Category']
🚀방법3: iloc 사용
#: 은 모든 행을 가져오겠다는 의미, DataFrame의 인덱스 번호 4번(카테고리)컬럼을 가져오겠다는 의미 df.iloc[:,4]
🚀방법1: [[]] 사용
df[['Category','Selling Price']]
🚀 방법2: iloc 사용
# : 은 모든 행을 가져오겠다는 의미이며 dataframe 의 인덱스 번호 4번,7번 컬럼을 가져오겠다는 희미 df.iloc[:,[4,7]]
df3.drop('Interaction type', axis=1, inplace=True) # 다시 복원라려면 df3에 테이블 다시 넣어주기
✅ 조건에 만족하면 정상출력하고, 아닌 행은 NaN으로 반환
df.where(df2['Age']>50)
✅ 조건에 부합하는 데이터만 가져오고 싶을때
a = ((df2['Age']>50) & (df2['Gender']== 'Male')) df2[a]✔️ mask는 True 또는 False 값을 가지는 Boolean Series입니다.
✔️ df2[a]를 사용하면 True인 행만 필터링됩니다.
select Gender, count(Customer ID) from df2 group by Gender
df2.groupby('Gender')['Customer ID'].count()
select Gender, Location, count(Customer ID) from df2 group by Gender, Location
df2.groupby(['Gender','Location'])['Customer ID'].count()
select Location, count(distinct Age) from df2 group by Location
# count는 중복제거를 하지 않고, unique 는 중복을 제거합니다. df2.groupby('Location')['Age'].unique() # count랑 비교해보기 #df2.groupby('Location')['Age'].count()
select Location, count(distinct Age) as cnt from df2 group by Location order by cnt desc
#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 |
함수 실행 시 () 필수
df.head() (⭕ 실행됨) df.head (❌ 실행 안 됨, 함수 객체만 반환됨)데이터 선택은 [] 사용
df['Age'] → 특정 컬럼 선택 df[['Age', 'Name']] → 여러 개의 컬럼 선택 df.iloc[0] → 첫 번째 행 선택 속성 접근 시 () 없음
df.shape, df.columns처럼 속성을 가져올 때는 () 없이 사용