AI/Pandas

Series, Dataframe 생성, indexing, selection

LTSGOD 2023. 3. 12. 00:02

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으로 변환할 수 있다.