Series, Dataframe 생성, indexing, selection
Pandas가 도대체 뭡니까??
- panel data -> pandas
Pandas는 파이썬에서 데이터 분석과 조작을 위한 라이브러리로, 데이터를 효율적으로 처리하고 다양한 형태로 변환할 수 있는 기능을 제공합니다.
Pandas는 2개의 기본적인 데이터 구조인 시리즈(Series)와 데이터프레임(DataFrame)을 제공합니다. 시리즈는 1차원 배열 구조를 갖고 있으며, 데이터프레임은 행과 열로 구성된 2차원 테이블 구조를 갖고 있습니다.
데이터프레임은 CSV, Excel, SQL 데이터베이스 등 다양한 데이터 소스에서 데이터를 로드하고, 병합, 정렬, 필터링, 그룹화, 집계, 결측치 처리 등 다양한 데이터 조작 작업을 수행할 수 있습니다.
- 구조화된 데이터 처리를 지원하는 Python 라이브러리이다.
- 데이터 처리 및 통계분석을 위해 사용된다 Excel과 비슷하다.
Series
Pandas의 Series는 1차원 배열과 같은 자료구조입니다. 각 원소는 유일한 인덱스 레이블로 참조됩니다.
Series는 일반적으로 NumPy의 배열과 유사하지만, NumPy의 배열과 달리 인덱스 레이블을 사용하여 색인할 수 있습니다. 인덱스는 라벨링되어 있으므로, 위치가 아닌 라벨을 사용하여 데이터에 접근할 수 있습니다.
Series는 데이터의 합계, 평균, 최소/최대값, 분산 등의 통계량을 계산하는 메소드도 제공하며, 다양한 데이터 조작 작업을 지원하는 메소드와 함수도 포함되어 있습니다.
아래는 Series 객체를 생성하고 기본적인 사용 방법을 보여주는 예시입니다.
import pandas as pd
# Python 리스트로부터 Series 객체 생성
data = [10, 20, 30, 40, 50]
s = pd.Series(data)
# Series 객체 출력
print(s)
# 인덱스 레이블에 접근하여 데이터 출력
print(s[0]) # 10
print(s[3]) # 40
아래는 index 배정 예시입니다.
인덱스 레이블을 리스트 형태로 생성자에 전달하여 Series 객체 생성
import pandas as pd
# 인덱스 레이블을 리스트 형태로 생성자에 전달하여 Series 객체 생성
data = [10, 20, 30, 40, 50]
index = ['a', 'b', 'c', 'd', 'e']
s = pd.Series(data, index=index)
# Series 객체 출력
print(s)
# 인덱스 레이블에 접근하여 데이터 출력
print(s['a']) # 10
print(s['d']) # 40
Series 객체 생성 후 인덱스 레이블 지정
import pandas as pd
# 인덱스 레이블이 없는 Series 객체 생성
data = [10, 20, 30, 40, 50]
s = pd.Series(data)
# Series 객체의 인덱스 레이블을 지정
s.index = ['a', 'b', 'c', 'd', 'e']
# Series 객체 출력
print(s)
# 인덱스 레이블에 접근하여 데이터 출력
print(s['a']) # 10
print(s['d']) # 40
인덱스 레이블을 따로 생성하지 않고 Series 객체 생성자에서 바로 인덱스 레이블 지정
import pandas as pd
# Series 객체 생성자에서 인덱스 레이블 지정
s = pd.Series([10, 20, 30, 40, 50], index=['a', 'b', 'c', 'd', 'e'])
# Series 객체 출력
print(s)
# 인덱스 레이블에 접근하여 데이터 출력
print(s['a']) # 10
print(s['d']) # 40
Dataframe이 도대체 뭐여??
Pandas의 DataFrame은 2차원 배열과 같은 자료구조입니다. 여러 개의 컬럼(column)으로 구성되며, 각 컬럼은 서로 다른 데이터 유형(숫자, 문자열, 불리언 등)을 포함할 수 있습니다. 각 행(row)은 고유한 인덱스(index)로 식별됩니다.
import pandas as pd
# DataFrame 생성 (Python 사전을 사용한 예시)
data = {'이름': ['홍길동', '김철수', '박영희'],
'나이': [20, 25, 30],
'성별': ['남', '남', '여']}
df = pd.DataFrame(data)
# DataFrame 출력
print(df)
# 컬럼에 접근하여 데이터 출력
print(df['이름']) # 인덱스가 포함된 Series 객체로 반환됨
print(df['나이'])
print(df['성별'])
# 인덱스 레이블에 접근하여 데이터 출력
print(df.loc[0])
print(df.loc[1])
print(df.loc[2])
위의 예시에서는 Python 사전을 사용하여 DataFrame을 생성하였습니다. 각 사전의 키는 DataFrame의 컬럼 이름이 되며, 각 값은 해당 컬럼에 대한 데이터가 됩니다. 따라서, 위의 예시에서는 '이름', '나이', '성별'이라는 3개의 컬럼이 생성되었습니다. 이후 DataFrame 객체의 인덱스 레이블에 접근하여 데이터를 출력할 수 있습니다.
그러나 보통 Dataframe을 직접 만들어서 쓰는경우는 거의 없고 불러온 데이터프레임을 활용한다.
Series 추출
DataFrame에서 하나의 컬럼을 추출하면 Series 객체가 반환됩니다. 이를 위해 DataFrame 객체에서 [] 연산자를 사용하며, 추출하고자 하는 컬럼 이름을 전달하면 됩니다. 다음은 예시입니다
import pandas as pd
# DataFrame 생성 (Python 사전을 사용한 예시)
data = {'이름': ['홍길동', '김철수', '박영희'],
'나이': [20, 25, 30],
'성별': ['남', '남', '여']}
df = pd.DataFrame(data)
# DataFrame 출력
print(df)
# '이름' 컬럼에 대한 Series 객체 추출
name_series = df['이름']
print(name_series)
# '나이' 컬럼에 대한 Series 객체 추출
age_series = df['나이']
print(age_series)
# '성별' 컬럼에 대한 Series 객체 추출
gender_series = df['성별']
print(gender_series)
위의 예시에서는 DataFrame에서 '이름', '나이', '성별' 컬럼에 대한 Series 객체를 추출하였습니다. 이후, 각 Series 객체를 출력하였습니다.
Dataframe Indexing
- 숫자 인덱싱: iloc
iloc은 위치를 기반으로 인덱싱합니다. iloc 속성을 사용하여 DataFrame에서 원하는 위치의 데이터에 접근할 수 있습니다. iloc[행 인덱스, 열 인덱스] 형태로 사용합니다. 예를 들어, 다음과 같이 사용할 수 있습니다.
import pandas as pd
# DataFrame 생성 (Python 사전을 사용한 예시)
data = {'이름': ['홍길동', '김철수', '박영희'],
'나이': [20, 25, 30],
'성별': ['남', '남', '여']}
df = pd.DataFrame(data)
# iloc를 사용한 숫자 인덱싱
print(df.iloc[0, 1]) # '홍길동'의 나이에 해당하는 값 출력
위의 예시에서는 DataFrame에서 첫 번째 행(인덱스 0)과 두 번째 열(인덱스 1)에 해당하는 값을 출력하였습니다.
- 라벨 인덱싱: loc
loc은 라벨을 기반으로 인덱싱합니다. loc 속성을 사용하여 DataFrame에서 원하는 라벨(인덱스 또는 컬럼 이름)의 데이터에 접근할 수 있습니다. loc[행 인덱스, 열 이름] 또는 loc[행 이름, 열 이름] 형태로 사용합니다. 예를 들어, 다음과 같이 사용할 수 있습니다.
import pandas as pd
# DataFrame 생성 (Python 사전을 사용한 예시)
data = {'이름': ['홍길동', '김철수', '박영희'],
'나이': [20, 25, 30],
'성별': ['남', '남', '여']}
df = pd.DataFrame(data)
# loc를 사용한 라벨 인덱싱
print(df.loc[0, '나이']) # '홍길동'의 나이에 해당하는 값 출력
df.T | 전치된 dataframe 반환 |
df.values | 행들을 출력 |
del df["age"] | colum 삭제 |
Selection & drop
원본 df에 변화가 갈려면 inplace = True 설정을 해야함( default는 False로 되어있다.)
df["age"].head(3) | column의 data 앞에서 3개 반환 |
df[[a,b]].head(3) | a, b column의 data 앞에서 3개 반환 |
df[:4] | 3까지의 행 반환 |
df["age"][:4] | 해당 column의 3개 행 반환(단 index가 숫자로 되어있을때만 가능) |
df.index = [0,1] | index 변경 |
df.loc[[1,3],["age","name"]] | index 지정, Column 지정 |
df.iloc[:2,:2] | Column Number와 index Number지정 |
df.drop(1) | index number 로 제거 1번 인덱스 행 제거(여러개행 제거가능) |
df.drop("city",axis = 1) | axis 지정 해서 Column 제거 |
series operation
기본적인 산술연산 지원해준다.
index를 기준으로 연산수행하고 겹치는 index가 없다면 Nan으로 반환한다.
dataframe operation
df는 column과 index를 모두 고려해야하고
fill_value옵션을 사용하면 Nan값을 0으로 변환할 수 있다.