요약/나만의 인사이트
- 데이터 분포 확인하기 .value.counts()
- embark_town 컬럼에 대해 데이터 분포 확인하기 df[’embark_town’].value_counts()
- who 컬럼에 대해 데이터 분포 확인하기 df[’who’].value_counts()
- 정렬하기 .sort_values(by=[ ], ascending=[ ])
- total_bill과 tip에 대한 내림차순 정렬하기 tips.sort_values(by=[’total_bill’, ‘tip’], ascending=[False, False])
- size를 기준으로 내림차순, tip을 기준으로 오름차순 정렬하기 tips.sort_values(by=[’size’, ‘tip’], ascending=[False, True])
- 인덱싱, 슬라이싱 df.loc[행, 열]
- 3행부터 7행까지 슬라이싱 df.loc[3 : 7]
- 처음부터 4행까지, plcass에서 fare컬럼까지 슬라이싱 df.loc[:4, ‘plcass’:’fare’]
- 2행부터 10행까지 2씩 점프하는 행부터, ‘age’와 ‘who’컬럼만 인덱싱 df.loc[np.arange(2, 11, 2), [’age’, ‘who’]]
- 조건을 만족하는 코드 condition , .isin()
- 나이가 30살 이상 남자 승객 조건 필터링 condition1 = df[’age] ≥ 30 condition2 = df[’who’] == ‘man’
- fare를 많이 낸 순으로 내림차순 정렬 df.loc[condition1 & condition2].sort_values(by=’fare’, ascending=False)
- 나이가 20살 이상 40살 미만인 승객 condition1 = (df[’age’] ≥ 20) & ( df[’age’] ≤40 )
- pclass가 1등급 혹은 2등급인 승객 condition2 = df[’pclass’] < 3
- 컬럼은 survived, pclass, age, fare 만 나오게 출력 df.loc[condition1 & condition2, [’survived’, ‘plcass’, ‘age’, ‘fare’]]
- tips 데이터셋 중 day가 Fri, Sat만 필터링 condition1 = tips[’day’].isin([’Fri’, ‘Sat’])
- tip이 10$보다 적게 낸 데이터만 필터링 condition2 = tips[’tip'] < 10
- 컬럼은 total_bill, tip, smoker, time만 출력 tips.loc[condition1 & condition2, [’total_bill’, ‘tip’, ‘smoker’, ‘time’]]
새롭게 알게 된 것
- loc , iloc 특정 값들을 찾는다.
- loc
- location의 약어
- 데이터 프레임의 행 또는 컬럼의 label이나 boolean array로 인덱싱하는 방법
- 사람이 읽을 수 있는 라벨 값으로 특정 값들을 골라오는 방법
- df.loc[행 인덱싱 값, 열 인덱싱 값]
- iloc
- integer location의 약어
- 데이터 프레임의 행이나 컬럼의 순서를 나타내는 정수로 특정 값을 추출하는 방법
- 즉 숫자로 데이터가 있는 위치에 접근한다고 생각하면 쉬움
- df.iloc[행 인덱스, 열 인덱스]
- loc
- isin
- 특정 값의 포함 여부를 확인하는 함수
- loc를 활용한 조건 필터링으로 자주 쓰임.
#name 컬럼에 kim과 lee가 있는 것만 필터링 sample.loc[sample['name'].isin(['kim', 'lee')] - 분산, 표준편차, 제곱근 영어로
- 분산 : variance → df[’fare’].var()
- 표준편차 : standard deviation → df[’fare’].std()
- 표준편차 : square root → np.sqrt(df[’fare’].var())
- 여기서 square root라는 넘파이 제곱근 함수 사용했음을 알 수 있음.
- agg - aggreation 통합 통계 적용
- df[’age’].agg([’min’, ‘max’, ‘count’, ‘mean’]) df[[’age’, ‘fare’]].agg([’min’, ‘max’, ‘count’, ‘mean’])
- quantile() - 분위
- 주어진 데이터를 동등한 크기로 분할하는 지점
- 10%의 경우 0.1을 80%의 경우 0.8d을 대입하여 값을 구한다.
df['age'].quantile(0.1) #14.0 - mode() - 최빈값
- penguin['island'].mode()
- dropna()
- dropna(how=’any’) : 1개라도 NaN값이 있는 행을 제거, ()안을 적지 않을 경우 기본값으로 적용 됨.
- dropna(how=’all’) :모두 NaN값이 존재시 제거
- 참고 NaN = Not a Number의 약자, 데이터 처리에 숫자가 있어야 할 자리에 결측치가 있다.
- inplace =True
- 원본 데이터를 바로 바꿔라라는 의미
- 행/열 삭제
- 열 삭제
- df1.drop('class', axis=1)
- 여기서 axis는 축이라는 뜻 axis=1은 열을 의미
- 열 삭제
특히 어려웠던 것
- 남자 승객만 평균 구해서 결측치에만 값 넣기
-
#남자 승객만 필터링 male = ( df['sex'] == 'male') #남자 승객의 나이 평균 구하기 male_mean = df.loc[male, 'age'].mean() #남자 승객 나이 결측치에 평균 넣기 df.loc[male, 'age']= df.loc[male, 'age'].fillna(male_mean) - fillna()
-
- fillna()는 원본 데이터를 바꾸지 않고 새로운 시리즈를 반환함.
- 그래서 반드시 결과를 다시 할당해야 함.
- df.loc[male, 'age']에 값에 할당해서 df안의 값이 바뀜.
- df2 = df.fillna(0) : df는 그대로고 df2에 결측치가 채워진 버전이 있음.
- df.fillna(0, inplace=True) : null값을 0으로 바꾼 결과를 반환하지 않고 df자체가 바로 수정됨
-
- #남자 승객만 필터링 male = ( df['sex'] == 'male') #남자 승객의 나이 평균 구하기 male_mean = df.loc[male, 'age'].mean() #남자 승객 나이 결측치에 평균 넣기 df.loc[male, 'age']= df.loc[male, 'age'].fillna(male_mean)
다음에 적용해 볼 것
- [ ] 복사와 결측치 할 차례
'기타 > Python' 카테고리의 다른 글
| 250710_파이썬(표준라이브러리), 머신러닝(선형회귀, 랜덤포레스트 복습) (2) | 2025.07.10 |
|---|---|
| 250703_파이썬(길이 N의 부분문자열 뽑기), visual studio code 가상환경 설정 (4) | 2025.07.03 |
| 250618_SQL변수선언 @hour / 파이썬 for if if (0) | 2025.06.18 |
| 250616_파이썬 내장함수, 클래스(추상클래스 등) (0) | 2025.06.16 |
| 250611,13_클래스 (0) | 2025.06.13 |