DevSSOM
파이썬 pandas - 데이터프레임의 데이터 선택, 추가, 수정하기 본문
반응형
데이터 선택하기
1. 인덱싱 / 슬라이싱
데이터프레임이나 시리즈 데이터에서 데이터를 찾는 방법은 두 가지가 있음.
- loc : 명시적 인덱스를 참조하는 함수. 쉽게 말하면, 데이터프레임에 어떤 인덱스가 있는지 알고 딱 이름을 넣어서 걔만 빼오는 거야. loc는 location의 약자.
- iloc : 암묵적인 인덱스를 참조하는 함수. 인덱스 값이 뭔지 모를 때, '아... 그그 첫번째 인덱스 있잖아? 그거 빼와.' 해서 빼오는 거. 학교 선생님들이 반에서 몇 번 불러서 발표시키는 것처럼.
# Country DataFrame
population gdp
korea 5180 169320000
japan 12718 516700000
china 141500 1409250000
usa 32676 2041280000
country.loc['korea'] # 인덱싱
# 인덱싱 결과값
population 5180
gdp 169320000
Name: korea, dtype: int64
country.loc['korea':'japan', :'population'] # 슬라이싱 [앞에는 인덱스 자리, 뒤에는 컬럼 자리]
# 슬라이싱 결과값
population
korea 5180
japan 12718
country.iloc[0] # 인덱싱
# 인덱싱 결과값
population 5180
gdp 169320000
Name: korea, dtype: int64
country.iloc[1:3, :2] # 슬라이싱 [앞에는 인덱스 자리, 뒤에는 컬럼 자리]
# 슬라이싱 결과값
population gdp
japan 12718 516700000
china 141500 1409250000
2. 컬럼으로 선택
컬럼명을 활용해서 데이터프레임에서 데이터를 선택할 수 있음. 시리즈의 합이 데이터프레임이니까, 데이터프레임에서 일부를 잘라내면 그게 또 시리즈가 됨. country['gdp'] 이렇게 대괄호를 한 번 하면 컬럼이지만, country[['gdp']] 이렇게 대괄호를 두 번 하면 데이터프레임 그 자체가 됨. 그래서 인덱스, 컬럼 뚜껑이 덮혀진 그대로 나오게 됨.
# Country DataFrame
population gdp
korea 5180 169320000
japan 12718 516700000
china 141500 1409250000
usa 32676 2041280000
country['gdp']
# Series
korea 169320000
japan 516700000
china 1409250000
usa 2041280000
Name: gdp, dtype: int64
country[['gdp']]
# DataFrame
gdp
korea 169320000
japan 516700000
china 1409250000
usa 2041280000
3. 조건으로 선택
Masking 연산이나 query 함수를 활용해서 조건에 맞는 값만 데이터프레임에서 뽑아낼 수도 있음. Numpy의 마스킹 연산처럼 조건식을 직접 쓸 수도 있고, query() 함수를 이용하는 방법도 있음.
# masking 연산 활용
country[country['population'] < 10000]
# population 컬럼의 값 중에서 10000보다 작은 것만 선택
population gdp
korea 5180 169320000
# query 함수 활용
country.query("population > 100000")
# population 값이 100000이 넘는 값을 선택
population gdp
china 141500 1409250000
데이터 변경하기 - 추가/수정
1. 컬럼 추가하기
Series도 numpy array처럼 연산자를 활용할 수 있음.
gdp_per_capita = country['gdp'] / country['population']
# 두 개의 시리즈 데이터를 서로 나누게 됨
# 이걸 그대로 데이터프레임에 넣기 위해서는
# 이렇게 새로운 컬럼으로 추가해줌
country['gdp per capita'] = gdp_per_capita
# 컬럼 추가 결과값
population gdp gdp per capita
korea 5180 169320000 32687.258687
japan 12718 516700000 40627.457147
china 141500 1409250000 9959.363958
usa 32676 2041280000 62470.314604
2. 리스트로 추가/수정 or 딕셔너리로 추가/수정
df = pd.DataFrame(columns = ['이름', '나이', '주소'])
# 데이터프레임 생성
df.loc[0] = ['길동', '26', '서울']
# 리스트로 데이터 추가
이름 나이 주소
0 길동 26 서울
df.loc[1] = {'이름':'철수', '나이':'25', '주소':'인천'}
# 딕셔너리로 데이터 추가
이름 나이 주소
0 길동 26 서울
1 철수 25 인천
df.loc[1, '이름'] = '영희'
# 명시적 인덱스를 활용해서 데이터 수정
이름 나이 주소
0 길동 26 서울
1 영희 25 인천
3. NaN 컬럼 추가
NaN값으로 초기화한 새로운 컬럼을 추가할 수도 있음. NaN은 numpy의 Not a Number -> 숫자가 아니다. 비어있는 데이터다. 라는 뜻.
df['전화번호'] = np.nan
# 새로운 컬럼 추가 후에 초기화
이름 나이 주소 전화번호
0 길동 26 서울 NaN
1 영희 25 인천 NaN
df.loc[0, '전화번호'] = '01012341234'
# 명시적 인덱스로 데이터 수정
이름 나이 주소 전화번호
0 길동 26 서울 01012341234
1 영희 25 인천 NaN
4. 컬럼 삭제하기
drop 을 활용해서, 데이터프레임에서 컬럼을 삭제한 후에 inplace 속성으로 원본을 변경하는 설정을 할 수도 있음.
df.drop('전화번호', axis = 1, inplace = True) # 컬럼 삭제
# axis = 1 : 열 방향 / axis = 0 : 행 방향
# inplace = True : 원본 변경 / inplace = False : 원본 변경 X
# 컬럼 삭제 결과
0 길동 26 서울
1 영희 25 인천
728x90
반응형
'Python > 기초' 카테고리의 다른 글
파이썬 pandas - groupby 함수로 그룹으로 묶기 (0) | 2021.07.26 |
---|---|
파이썬 pandas - 데이터프레임 분석용 함수 (0) | 2021.07.26 |
파이썬 pandas - 데이터프레임 정렬하기 (0) | 2021.07.26 |
파이썬 pandas - 데이터프레임 (1) | 2021.07.26 |
파이썬 pandas - Series 데이터 (0) | 2021.07.26 |
파이썬 Numpy - 배열의 인덱싱과 슬라이싱 (0) | 2021.07.26 |
파이썬 Numpy - 배열의 기초 (0) | 2021.07.26 |
댓글