DataFrame 에 저장되어 있는 특정 열/행 데이터를 조회하여 값을 변경하는 방법에 대해 학습합니다.
DataFrame 의 열 데이터 조회
방법1) 인덱싱 기법 사용하기 : DataFrame[‘조회할 열의 인덱스명’]
방법2) . 연산자 사용하기 : DataFrame. 조회할 열의 인덱스명
두 방법 중 인덱싱 기법이 권장됩니다.
여러 열을 조회할 때는 .연산자는 불가능하고, 인덱싱 기법만 가능합니다.
이때 인덱스 값은 리스트 형태로 전달해야 합니다.
DataFrame 의 행 데이터 조회
행 데이터 조회를 위해 loc 프로퍼티를 사용 : DataFrame.loc[조회할 행의 인덱스]
행과 열의 인덱스를 모두 사용하여 조회
DataFrame.loc [‘조회할 행의 인덱스’, ‘조회할 열의 인덱스‘]
<실습코드>
import pandas as pd
# 실습 데이터 생성
score = {'name': ['Jessi', 'Emma', 'Alex', 'Jessi', 'Tom'],
'score': [100, 95, 80, 85, 97],
'grade': ['A', 'A', 'B', 'B', 'A'],
'subject':['python', 'java', 'python', 'c', 'java']}
c = ['name', 'subject', 'score', 'grade', 'etc']
df = pd.DataFrame(data=score, columns=c)
print(df)
'''
인덱싱 기법과 . 연산자로 열 데이터 조회 실습
'''
print('\nColumns : name')
print(df['name'])
print('\nColumns : name')
print(df.name)
'''
df.name 의 타입 출력하여 확인
'''
print('\nType:', type(df.name))
'''
다중 열 데이터 조회 실습
'''
print('\nColumns : name-subject-grade')
print(df[['name','subject','grade']])
'''
etc 열 데이터 변경하기
'''
print('\nModify Column Data')
df['etc']= 0
print(df)
'''
loc 이용하여 행 데이터 조회 실습
'''
print('\nRows-1')
print(df.loc[1])
'''
loc 이용하여 다중 행 데이터 조회 실습
'''
print('\nRows-0,2,4')
print(df.loc[[0,2,4]])
'''
특정 행 데이터 변경 실습
'''
print('\nModify Rows0')
df.loc[0] = ['Jessi', 'java', 70, 'C', 1]
print(df)
'''
행과 열의 조건을 동시에 지정하여 조회 실습
'''
row_idx = [1,2,4]
col_idx = ['name', 'subject', 'grade']
print('\nRows & Columns')
print(df.loc[row_idx, col_idx])
<실행결과>
name subject score grade etc
0 Jessi python 100 A NaN
1 Emma java 95 A NaN
2 Alex python 80 B NaN
3 Jessi c 85 B NaN
4 Tom java 97 A NaN
Columns : name
0 Jessi
1 Emma
2 Alex
3 Jessi
4 Tom
Name: name, dtype: object
Columns : name
0 Jessi
1 Emma
2 Alex
3 Jessi
4 Tom
Name: name, dtype: object
Type: <class 'pandas.core.series.Series'>
Columns : name-subject-grade
name subject grade
0 Jessi python A
1 Emma java A
2 Alex python B
3 Jessi c B
4 Tom java A
Modify Column Data
name subject score grade etc
0 Jessi python 100 A 0
1 Emma java 95 A 0
2 Alex python 80 B 0
3 Jessi c 85 B 0
4 Tom java 97 A 0
Rows-1
name Emma
subject java
score 95
grade A
etc 0
Name: 1, dtype: object
Rows-0,2,4
name subject score grade etc
0 Jessi python 100 A 0
2 Alex python 80 B 0
4 Tom java 97 A 0
Modify Rows0
name subject score grade etc
0 Jessi java 70 C 1
1 Emma java 95 A 0
2 Alex python 80 B 0
3 Jessi c 85 B 0
4 Tom java 97 A 0
Rows & Columns
name subject grade
1 Emma java A
2 Alex python B
4 Tom java A
DataFrame 에 데이터를 추가하거나 삭제하는 방법에 대해 학습합니다.
DataFrame 에 데이터 추가하기
df[‘new column’] = 열에 추가할 데이터셋
df.loc[‘new row’] = 행에 추가할 데이터 셋
DataFrame 의 데이터 삭제하기
df.drop(row_index) = 행 데이터 삭제
df.drop(columns=[col_index]) = 열 데이터 삭제
<실습코드>
import pandas as pd
# 실습 데이터 생성
score = {'name': ['Jessi', 'Emma', 'Alex', 'Jessi', 'Tom'],
'score': [100, 95, 80, 85, 97],
'grade': ['A', 'A', 'B', 'B', 'A'],
'subject':['python', 'java', 'python', 'c', 'java']}
c = ['name', 'subject', 'score', 'grade', 'etc']
df = pd.DataFrame(data=score, columns=c)
print(df)
'''
Series 객체 생성하여 'semester' 라는 열 추가
'''
semester_data = pd.Series(['20-01', '20-01', '20-02', '20-01'])
df['semester'] = semester_data
print('\nAdd Columns : semester')
print(df)
'''
연산 이용하여 'high_score' 라는 열 추가
'''
df['high_score'] = df['score']>90
print('\nAdd Columns : high_score')
print(df)
'''
6 번 인덱스에 행 데이터 추가
'''
df.loc[6] = ['Jina', 'python', 100, 'A', 1, '20-02', True]
print('\nAdd Row 6')
print(df)
'''
1) drop() 이용하여 행 데이터 삭제
2) inplace 인자를 사용하여 원본 데이터에 바로 삭제
'''
df.drop(6, inplace=True)
print('\nDelete Row : 6')
print(df)
'''
drop() 이용하여 'etc' 열 삭제 (원본데이터변경)
'''
df.drop(columns=['etc'], inplace=True)
print('\nDelete Column :')
print(df)
<실행결과>
name subject score grade etc
0 Jessi python 100 A NaN
1 Emma java 95 A NaN
2 Alex python 80 B NaN
3 Jessi c 85 B NaN
4 Tom java 97 A NaN
Add Columns : semester
name subject score grade etc semester
0 Jessi python 100 A NaN 20-01
1 Emma java 95 A NaN 20-01
2 Alex python 80 B NaN 20-02
3 Jessi c 85 B NaN 20-01
4 Tom java 97 A NaN NaN
Add Columns : high_score
name subject score grade etc semester high_score
0 Jessi python 100 A NaN 20-01 True
1 Emma java 95 A NaN 20-01 True
2 Alex python 80 B NaN 20-02 False
3 Jessi c 85 B NaN 20-01 False
4 Tom java 97 A NaN NaN True
Add Row 6
name subject score grade etc semester high_score
0 Jessi python 100 A NaN 20-01 True
1 Emma java 95 A NaN 20-01 True
2 Alex python 80 B NaN 20-02 False
3 Jessi c 85 B NaN 20-01 False
4 Tom java 97 A NaN NaN True
6 Jina python 100 A 1 20-02 True
Delete Row : 6
name subject score grade etc semester high_score
0 Jessi python 100 A NaN 20-01 True
1 Emma java 95 A NaN 20-01 True
2 Alex python 80 B NaN 20-02 False
3 Jessi c 85 B NaN 20-01 False
4 Tom java 97 A NaN NaN True
Delete Column :
name subject score grade semester high_score
0 Jessi python 100 A 20-01 True
1 Emma java 95 A 20-01 True
2 Alex python 80 B 20-02 False
3 Jessi c 85 B 20-01 False
4 Tom java 97 A NaN True
Pandas 는 다양한 포맷의 파일을 DataFrame 으로 읽을 수 있는 다양한 Reader/Writer 함수를 제공합니다.
Pandas 에서 지원하는 파일 포맷의 종류는 공식 사이트을 참고하세요.
pd.read_csv(filepath or url)
pd.read_excel(filepath or url)
pd.read_excel(filepath or url, header=None)
pd.read_excel(filepath or url, header=n)
pd.read_excel(filepath or url, sheet_name='sheet명')
<실습코드>
import pandas as pd
'''
titanic_train.csv 파일을 읽어오세요.
'''
url = 'https://codepresso-online-platform-public.s3.ap-northeast-2.amazonaws.com/learning-resourse/titanic_train.csv'
titanic_df = pd.read_csv(url)
print(type(titanic_df))
'''
읽어온 데이터의 info 를 출력해보세요.
'''
print('\nSummary of DataFrame')
print(titanic_df.info())
'''
읽어온 데이터의 행 데이터 5개를 출력해보세요.
'''
print('\nReturn the first n rows')
print(titanic_df.head(5))
# students_score.xlsx 이 저장된 url
url = 'https://codepresso-online-platform-public.s3.ap-northeast-2.amazonaws.com/learning-resourse/python-data-analysis/students_score.xlsx'
'''
엑셀 파일에서 데이터 읽기
'''
print('\nRead students_score.xlsx')
sample_df = pd.read_excel(url)
print(sample_df)
'''
1) header=none 옵션으로 컬럼 없이 데이터 읽기
2) df.columns 에 새로운 컬럼명 저장하기
주석(#)을 지우고, 주어진 빈칸의 코드를 완성하세요.
'''
sample_df = pd.read_excel(url, header=2)
sample_df.columns = ['name', 'age', 'score', 'grade', 'subject']
print('\nRead Excel by header=none')
print(sample_df)
'''
'students' sheet 에 있는 데이터 읽기
주석(#)을 지우고, 주어진 빈칸의 코드를 완성하세요.
'''
print('\nRead Excel on students sheet')
student_df = pd.read_excel(url, sheet_name='students')
print(student_df)
<실행결과>
<class 'pandas.core.frame.DataFrame'>
Summary of DataFrame
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 PassengerId 891 non-null int64
1 Survived 891 non-null int64
2 Pclass 891 non-null int64
3 Name 891 non-null object
4 Sex 891 non-null object
5 Age 714 non-null float64
6 SibSp 891 non-null int64
7 Parch 891 non-null int64
8 Ticket 891 non-null object
9 Fare 891 non-null float64
10 Cabin 204 non-null object
11 Embarked 889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.7+ KB
None
Return the first n rows
PassengerI Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
1 0 3Braund, Mr.. male 22.0 1 0 A/5 21171 7.25 nan S
2 1 1Cumings, M.. female 38.0 1 0 PC 17599 71.2833 C85 C
3 1 3Heikkinen,.. female 26.0 0 0STON/O2. 3.. 7.925 nan S
4 1 1Futrelle, .. female 35.0 1 0 113803 53.1 C123 S
5 0 3Allen, Mr... male 35.0 0 0 373450 8.05 nan S
Read students_score.xlsx
Jessi 20 100 A python
0 Emma 24 95 A java
1 Alex 23 80 B python
2 Jessi 20 85 B c
3 Tom 27 97 A java
4 Sia 28 79 C python
Read Excel by header=none
name age score grade subject
0 Jessi 20 85 B c
1 Tom 27 97 A java
2 Sia 28 79 C python
Read Excel on students sheet
name age etc1 etc2 etc3 email
0 Lee 25 0.1 0.1 0.1 lee@codepresso.kr
1 Hwang 24 0.1 0.1 0.1 hwang@codepresso.kr
2 Kim 28 0.1 0.1 0.1 kim@codepresso.kr
3 Choi 27 0.1 0.1 0.1 choi@codepresso.kr
4 Park 21 0.1 0.1 0.1 park@codepresso.kr
5 Lim 20 0.1 0.1 0.1 lim@codepresso.kr