데이터 재설정

2024. 9. 30. 20:52python 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