데이터 재설정
2024. 9. 30. 20:52ㆍpython study/sw와 ai 데이터 분석
데이터 추출
변수명[조건식]
- 조건식: 열이름과 비교연산자를 활용하여서 데이터를 비교함
- 다음과 같은 scroe1 데이터가 있다고 하자
학번 분반 성별 중간고사 기말고사
0 2201 B 여 82 79
1 2202 A 여 82 91
2 2203 A 여 93 27
3 2204 B 여 79 81
4 2205 B 여 90 88
5 2206 B 여 84 82
6 2207 A 여 85 79
7 2208 A 여 91 96
8 2209 B 여 100 98
9 2210 B 여 72 70
10 2211 B 남 88 85
11 2212 B 남 85 82
12 2213 A 남 58 50
13 2214 A 남 76 93
14 2215 A 남 89 79
15 2216 A 남 32 57
16 2217 B 남 82 95
17 2218 B 남 85 100
18 2219 B 남 79 89
19 2220 A 남 80 85
20 2221 A 남 91 98
- 분반이 A인 경우
print(score1[score1['분반']=='A'])
학번 분반 성별 중간고사 기말고사
1 2202 A 여 82 91
2 2203 A 여 93 27
6 2207 A 여 85 79
7 2208 A 여 91 96
12 2213 A 남 58 50
13 2214 A 남 76 93
14 2215 A 남 89 79
15 2216 A 남 32 57
19 2220 A 남 80 85
20 2221 A 남 91 98
- 성별에서 여자를 선택하는 경우
print(score1[score1['성별']=='여'])
학번 분반 성별 중간고사 기말고사
0 2201 B 여 82 79
1 2202 A 여 82 91
2 2203 A 여 93 27
3 2204 B 여 79 81
4 2205 B 여 90 88
5 2206 B 여 84 82
6 2207 A 여 85 79
7 2208 A 여 91 96
8 2209 B 여 100 98
9 2210 B 여 72 70
- 중간고사 점수가 90넘는 경우
print(score1[score1['중간고사']>=90])
- &(엠퍼센드)나 or 연산( | )을 사용하는 경우에는 괄호로 묶어서 사용한다.
- 중간고사 점수가 90이 넘고, 기말고사 점수가 90이 넘는 경우
print(score1[(score1['중간고사']>=90) & (score1['기말고사']>=90)])
학번 분반 성별 중간고사 기말고사
7 2208 A 여 91 96
8 2209 B 여 100 98
20 2221 A 남 91 98
- 중간고사 점수가 90이 넘거나 기말고사 90이 넘는 경우
print(score1[(score1['중간고사']>=90)| (score1['기말고사']>=90)])
학번 분반 성별 중간고사 기말고사
1 2202 A 여 82 91
2 2203 A 여 93 27
4 2205 B 여 90 88
7 2208 A 여 91 96
8 2209 B 여 100 98
13 2214 A 남 76 93
16 2217 B 남 82 95
17 2218 B 남 85 100
20 2221 A 남 91 98
query('조건식')
- query: 변수명.query('조건식')으로도 데이터추출 가능하다.
- 분반이 A일 경우
print(score1.query('분반=="A"'))
학번 분반 성별 중간고사 기말고사
1 2202 A 여 82 91
2 2203 A 여 93 27
6 2207 A 여 85 79
7 2208 A 여 91 96
12 2213 A 남 58 50
13 2214 A 남 76 93
14 2215 A 남 89 79
15 2216 A 남 32 57
19 2220 A 남 80 85
20 2221 A 남 91 98
- query('조건식')[['열제목','열제목']]으로 하면 조건식에 알맞고 열제목에 해당하는 데이터만 출력해 준다.
- 기말고사 점수가 90 이상이고 열이 분반과 성별이 데이터 출력
print(score1.query('기말고사>=90')[['분반','성별']])
분반 성별
1 A 여
7 A 여
8 B 여
13 A 남
16 B 남
17 B 남
20 A 남
- 조건식에서 성별이 남자인지를 확인할 때(문자 혹은 문자열 활용)는 작은따옴표가 아니라 큰 따옴표를 사용해야 한다.
print(score1.query('성별=="남"')) #'남'->(X)
학번 분반 성별 중간고사 기말고사
10 2211 B 남 88 85
11 2212 B 남 85 82
12 2213 A 남 58 50
13 2214 A 남 76 93
14 2215 A 남 89 79
15 2216 A 남 32 57
16 2217 B 남 82 95
17 2218 B 남 85 100
18 2219 B 남 79 89
19 2220 A 남 80 85
20 2221 A 남 91 98
데이터 정렬하기
변수명. sort_values(by='정렬 기준 열이름', ascending=True)
- by=' ': 기준인 열 이름을 넣어주는데 정렬 기준이 여러 가지라면 대괄호( [ ] )를 활용한다.
- ascending
생략 시: 오름차순
ascending=True: 오름차순
ascending=False: 내림차순
- 중간고사 점수를 기준으로 오름차순
print(score1.sort_values(by='중간고사', ascending=True))
학번 분반 성별 중간고사 기말고사
15 2216 A 남 32 57
12 2213 A 남 58 50
9 2210 B 여 72 70
13 2214 A 남 76 93
18 2219 B 남 79 89
3 2204 B 여 79 81
19 2220 A 남 80 85
0 2201 B 여 82 79
1 2202 A 여 82 91
16 2217 B 남 82 95
5 2206 B 여 84 82
17 2218 B 남 85 100
6 2207 A 여 85 79
11 2212 B 남 85 82
10 2211 B 남 88 85
14 2215 A 남 89 79
4 2205 B 여 90 88
7 2208 A 여 91 96
20 2221 A 남 91 98
2 2203 A 여 93 27
8 2209 B 여 100 98
- 여러 기준으로 있을 때 by=['열이름', '열이름'], ascending=[True, False] 형태로 작성
- 열이름 순서대로 정렬함
- 다음은 예시는 성별과 중간고사를 기준으로 정렬하는데 성별은 오름차순으로 하고, 중간고사 점수는 내림차순으로 정렬한다.
print(score1.sort_values(by=['성별','중간고사'],ascending=[True,False]))
학번 분반 성별 중간고사 기말고사
20 2221 A 남 91 98
14 2215 A 남 89 79
10 2211 B 남 88 85
11 2212 B 남 85 82
17 2218 B 남 85 100
16 2217 B 남 82 95
19 2220 A 남 80 85
18 2219 B 남 79 89
13 2214 A 남 76 93
12 2213 A 남 58 50
15 2216 A 남 32 57
8 2209 B 여 100 98
2 2203 A 여 93 27
7 2208 A 여 91 96
4 2205 B 여 90 88
6 2207 A 여 85 79
5 2206 B 여 84 82
0 2201 B 여 82 79
1 2202 A 여 82 91
3 2204 B 여 79 81
9 2210 B 여 72 70
데이터 그룹화하기
pandas 제공 통계함수
| 함수명 | 통계 |
| mean() | 평균 |
| std() | 표준편차 |
| max() | 최댓값 |
| min() | 최솟값 |
| sum() | 총 합 |
| median() | 중앙값 |
| count() | 개 |
- 변수명['열이름']. 통계함수
- 변수명[['열이름', '열이름']]. 통계함수: 열이름에 해당하는 결과를 각각 보여줌
- 학번이 몇 개 있는지 카운트해 주는 경우
score1['학번'].count()
21
- 중간고사 점수의 평균을 나타내주는 경우
score1['중간고사'].mean()
81.0952380952381
- 중간고사와 기말고사 점수의 평균을 각각 보여주는 경우
print(score1[['중간고사','기말고사']].mean())
중간고사 81.095238
기말고사 81.142857
groupby()
- 변수명. groupby('기준 열이름')[['열이름', '열이름']]. 통계함수: 한 가지 기준에 대해서 다른 값들을 그룹화하는 메서드
- 분반을 기준으로 하여서 기말고사 점수를 그룹화한 경우
print(score1.groupby('분반')['기말고사'].sum())
분반
A 755
B 949
- 분반을 기준으로 하여서 기말고사와 중간고사를 그룹화한 경우
print(score1.groupby('분반')[['기말고사','중간고사']].mean())
기말고사 중간고사
분반
A 75.500000 77.700000
B 86.272727 84.181818
데이터 결합하기
merge
- pd.merge(변수 1, 변수 2, on='기준 열', how='방식'): 두 데이터를 열을 기준으로 하여서 하나로 합쳐줌
- score1이라는 데이터와 score2라는 데이터를 학번을 기준으로 합치는 경우
mgscore=pd.merge(score1,score2, on='학번')
print(mgscore)
학번 분반 성별 중간고사 기말고사 출석 프로젝트
0 2201 B 여 82 79 74 65
1 2202 A 여 82 91 77 73
2 2203 A 여 93 27 76 75
3 2204 B 여 79 81 85 85
4 2205 B 여 90 88 95 95
5 2206 B 여 84 82 66 56
6 2207 A 여 85 79 76 80
7 2208 A 여 91 96 76 84
8 2209 B 여 100 98 91 89
9 2210 B 여 72 70 80 75
10 2211 B 남 88 85 90 94
11 2212 B 남 85 82 85 82
12 2213 A 남 58 50 60 60
13 2214 A 남 76 93 91 90
14 2215 A 남 89 79 90 93
15 2216 A 남 32 57 27 20
16 2217 B 남 82 95 81 79
17 2218 B 남 85 100 88 87
18 2219 B 남 79 89 82 80
19 2220 A 남 80 85 79 76
20 2221 A 남 91 98 96 100
- 만약 일치하지 않는 결합기의 경우에는 how='outer'를 활용하여서 NaN값으로 채워준다.
mgscore=pd.merge(score1,test1, on='학번', how='outer')
print(mgscore)
학번 분반 성별 중간고사 기말고사 출석 프로젝트
0 2201 B 여 82.0 79.0 74.0 65.0
1 2202 A 여 82.0 91.0 NaN NaN
2 2203 A 여 93.0 27.0 NaN NaN
3 2204 B 여 79.0 81.0 NaN NaN
4 2205 B 여 90.0 88.0 NaN NaN
5 2206 B 여 84.0 82.0 NaN NaN
6 2207 A 여 85.0 79.0 NaN NaN
7 2208 A 여 91.0 96.0 NaN NaN
8 2209 B 여 100.0 98.0 NaN NaN
9 2210 B 여 72.0 70.0 NaN NaN
10 2211 B 남 88.0 85.0 NaN NaN
11 2212 B 남 85.0 82.0 NaN NaN
12 2213 A 남 58.0 50.0 NaN NaN
13 2214 A 남 76.0 93.0 NaN NaN
14 2215 A 남 89.0 79.0 NaN NaN
15 2216 A 남 32.0 57.0 NaN NaN
16 2217 B 남 82.0 95.0 NaN NaN
17 2218 B 남 85.0 100.0 NaN NaN
18 2219 B 남 79.0 89.0 NaN NaN
19 2220 A 남 80.0 85.0 NaN NaN
20 2221 A 남 91.0 98.0 NaN NaN
21 2323 NaN NaN NaN NaN 0.0 0.0
concat
- pd.concat([변수명, 변수명]): 행을 기준으로 결합
contest=pd.concat([test1,test2])
print(contest)
학번 출석 프로젝트
0 2323 0 0
1 2201 74 65
0 2324 80 95
1 2325 50 65'python study > sw와 ai 데이터 분석' 카테고리의 다른 글
| numpy이해와 자료구조 (0) | 2024.11.04 |
|---|---|
| 데이터 시각화란? (0) | 2024.11.03 |
| 데이터 전처리 (0) | 2024.09.29 |
| 공공 데이터의 이해 (1) | 2024.09.29 |
| 데이터 분석 도구(colab) & 데이터 기초 (1) | 2024.09.28 |