판다스(Pandas)에 대해 소개할 때 단순히 Data 객체가 어떻게 생성되는지 예시코드만 던졌었다.
여기서는 객체의 행 또는 열을 선택하거나 추가/삭제/변경 등의 기능을 좀 더 상세히 적어놓으려 한다.
DataFrame 객체
행과 열로 이루어진 2차원 데이터를 다루기 위한 것으로 열은 각각의 변수, 행은 관측치를 나타낸다.
[생성하기]
데이터를 생성할 때는 list, dict(딕셔너리), EXCEL 등 다양하게 생성을 할 수 있다.
1. list를 사용해서 Data Frame 객체 생성하기
import pandas as pd #pandas 대신 pd 라는 별칭 사용의 의미
data = [['A', 1]], ['B',2], ['C',3]]
df = pd.DataFrame(data, columns ['col1', 'col2'])
print (df)
data 라는 변수 안에 행에 들어 갈 데이터들을 순서대로 작성해주고
df 라는 변수 안에 다시 값을 넣어주는데, 이 때 pd.dataFrame은 값을 데이터프레임 타입으로 변경해준다.
columns를 사용해서 원하는 컬럼값을 지정해주고 print 해보면 아래와 같은 출력결과가 나온다.
출력 결과
col1 col2 #column
0 A 1 #['A', 1]
1 B 2 #['B',2]
2 C 3 #['C',3]
2. ict(딕셔너리) 를 사용하여 DataFrame 객체 생성하기
우선 딕셔너리란 나처럼 자바만 팠던 사람들한테 낯선 존재긴한데,
형태만 살펴보면 HASH MAP의 형태와 같다. 키와 값으로 이루어진 형태로 키를 호출하면 값이 출력되는 구조이다.
판다스 데이터프레임에서 이 딕셔너리를 사용하여 DataFrame객체 생성이 가능하다.
data = {
'col1': ['A', 'B', 'C'],
'col2': [1, 2, 3]
}
df = pd.DataFrame(data)
print(df)
먼저 data를 보면 'col1'이라는 key값안에 ['A','B','C'] 라는 값이 있고 col2도 마찬가지의 구조로 되어있다.
이 key-value의 한 쌍을 {}로 묶어 딕셔너리의 형태를 띄고 있다.
이후 리스트와 동일하게 pd.DataFrame을 사용해서 data를 담아주면!
출력 결과
col1 col2 #key값
0 A 1 #value 1번째 값
1 B 2 #value 2번째 값
2 C 3 #value 3번째 값
Key값이 곧 column값이 되고, value에 담겨있던 순서대로 열을 기준으로 값이 써내려가진다.
3. 파일을 사용하여 DataFrame 객체 생성하기
csv 또는 xlsx의 확장자를 가진 파일을 사용하여 DataFrame객체로 만들 수 있는데이건 무지 쉽다.
파이썬 파일과 같은 경로에 담아 둔 뒤 pd.read_csv/excel 을 사용해서 그냥 파일명을 명시해주면 된다.
df = pd.read_csv('data.csv') #csv
df = pd.read_excel('data.xlsx') #xlsx
참고로 xlsx로 불러올 때 [XLRDError : Excel xlsx file; not supported] 라는 이상한 오류를 만날 수 있는데
xlrd가 업데이트 되면서 xlsx를 지원하지 않아서 뜨게되는 오류라고 한다.
이 문제는 openpyxl 모듈을 설치해주고 engine를 'openpyxl'으로 바꿔주면 쉽게 해결된다.
df = pd.read_excel('data.xlsx', engine='openpyxl)
이렇게 불러온 데이터를 데이터프레임 객체로 만들고 싶다면?
df = pd.DataFrame((pd.read_csv('data.csv')) #csv
df = pd.DataFrame((pd.read_excel('data.xlsx')) #xlsx
그냥 앞에 pd.DataFrame을 붙여주면 된다.
[선택하기]
이렇게 만들거나 불러 온 데이터 프레임 객체들 중 특정 열이나 행만 선택하고 싶은 경우가 생긴다.
1. 열(column)선택하기
df ['col1']
df [['col1', 'col2']] #다중으로 선택할 때
데이터프레임을 담았던 df.
그에 맞는 컬럼을 하나씩 나열해주면 된다. 하나만 쓰면 한개 컬럼만, 여러개 쓰면 다중의 컬럼이 선택된다.
2. 행(row) 선택하기
df.loc[0]
df.loc[[0, 1, 2]]
행은 df 뒤에 .loc를 붙여주고 선택하는 방법은 열과 동일하다.
df.loc[index, column]
이런 형식으로도 사용을 하는데, 행의 인덱스와 칼럼명의 형태로 데이터 프레임의 정보를 가져올 수 있다.
index 는 선택하려는 행의 인덱스 레이블 값
column은 선택하려는 열의 이름 값을 넣으면 된다.
[조작하기]
데이터 프레임과 원하는 열 또는 행을 선택하고 나면 이걸 조작해야하는 순간이 온다.그때 쓸 수 있는 옵션들인데 어렵지 않다.
1. 열(column)
# 열 추가하기
df['col3'] = [4, 5, 6]
먼저 열을 추가해주면 col3이라는 칼럼이 만들어지고 4, 5, 6이라는 값이 들어가게 된다.
출력 결과
col1 col2 col3 #key값
0 A 1 4 #value 1번째 값
1 B 2 5 #value 2번째 값
2 C 3 6 #value 3번째 값
반대로 .drop을 사용하면 해당 열을 삭제할 수 있다.
# 열 삭제하기
df.drop('col3', axis=1, inplace=True)
'col3'라는 이름을 가진 컬럼을 삭제할 것이라는 의미이고
axis는 간단하게 이야기하면 axis=0일 땐 행을 Drop. axis=1일때는 열을 Drop한다는 의미이다.
axis=0 - 각 열(column)의 모든 행(row)에 대해 동작한다는 의미로 진행방향이 위에서 아래. 즉, 세로로 동작한다.axis=1- 각 행(row)의 모든 열(column)에 대해 동작한다는 의미로 진행방향이 왼쪽에서 오른쪽. 즉, 가로로 동작한다.
우리는 col3이라는 이름의 열을 삭제할 것이기 때문에 axis=1을 써주면 col3 열에 대한 모든 행이 삭제될 것이다.
출력 결과
col1 col2
0 A 1
1 B 2
2 C 3
또하나
inplace라는 옵션이 True값으로 붙어 있는데, 이것의 목적은 기존 데이터프레임에 변경된 설정으로 덮어쓰겠다는 의미다.
특정 행을이나 열을 삭제하기 위해 drop()함수를 쓸 때 inplace를 사용하지 않으면
원하는 칼럼은 삭제되지만 그 데이터를 별도로 변수에 저장하지 않았기 때문에 다시 df(데이터프레임)를 불러오면
칼럼이 삭제되지 않은 상태로 불러와지게 된다.
그렇기 때문에 inplace=True를 입력하지 않으면 drop 후 특정 변수에 저장하도록 코드를 써주어야 하지만
inplace=True를 사용해주면 따로 저장하는 코드를 사용하지 않아도 기존 변수에 덮어쓰기가 가능해진다.
# 열 이름 변경하기
df.rename(columns={'col1': 'new_col1'}, inplace=True)
열(Column)의 이름을 변경할 때는 rename()을 사용해서 변경해줄 수 있다.
사실 칼럼의 이름을 바꾸는 일이 많을까 싶긴하지만, 가장 기본적인거니 적어본다.
'col1'칼럼의 이름을 'new_col1'로 바꾼다는 의미로 변경 전의 컬럼명과 변경하고 싶은 칼럼명을 적어주면 끝이다.
inplace 적용도 해주면 아래처럼 칼럼명이 바뀌어 출력이 된다.
출력 결과
new_col1 col2
0 A 1
1 B 2
2 C 3
2. 행(row) 열을 기준으로 데이터의 조작을 이해했다면 행도 같은 방식으로 조작이 되기 때문에 예시만 올려놓겠다.
# 행 추가하기
df.loc[3] = ['D', 4, 5]
# 행 삭제하기
df.drop(3, inplace=True)
행 추가 출력 결과
new_col1 col2
0 A 1
1 B 2
2 C 3
3 D 4
Series 객체
시리즈는 인덱스와 값으로 이루어진 1차원 데이터를 다루기 위한 것으로
DataFrame객체에서 열을 선택해서 추출이 가능한 객체이고 데이터프레임과 마찬가지로 시리즈 객체 생성을 할 수 있다.
[생성하기]
1. list를 사용해서 Data Frame 객체 생성하기
import pandas as pd
data = [1, 2, 3]
s = pd.Series(data, index=['a', 'b', 'c'])
print(s)
pd.Series()를 사용해주고, column대신 index를 넣어주면
index a, b, c 이름을 가진 행이 만들어지고 순서대로 1, 2, 3의 값이 들어갈 것이다.
출력 결과
a 1
b 2
c 3
2. ict(딕셔너리) 를 사용하여 DataFrame 객체 생성하기
data = {'a': 1, 'b': 2, 'c': 3}
s = pd.Series(data)
print(s)
리스트를 사용해서 생성한 객체와 출력값은 같지만 딕셔너리 형태로 담아 만들 수도 있다.a키의 값1, b키의 값2 .. 이런식으로 매칭하여 딕셔너리를 통째로 pd.Series에 담아주면 된다.
직접 코드에서 생성하고 수정/삭제 등은 오늘 적은 내용대로 하면되고,
csv, xlsx 등처럼 이미 있는 데이터를 불러와서 가공하는 내용은 다음 포스팅에!
'✨Framework+Library > 🐼PANDAS' 카테고리의 다른 글
[🐼Pandas] csv/xlsx/SQL 데이터 다루기 (0) | 2024.03.28 |
---|---|
[🐼Pandas] 데이터 분석을 위한 라이브러리 : Pandas / 라이브러리 소개 / 설치방법 (0) | 2024.03.27 |