pandas

데이터 추출

siwoli 2022. 4. 1. 00:41

pandas에는 다양한 데이터 추출 및 삭제하는 함수와 기법이 존재한다.

설명에 사용할 데이터는 아래와 같다.

import pandas as pd

raw_data = {'first_name':['Jason', 'Molly', 'Tina', 'Jake','Amy', 'Coner'],
            'last_name':['Miller', 'Jacobson', 'Ali', 'Milner', 'Cooze', 'Garden'],
            'age':[42,52,36,24,73, 28],
            'city':['San Francisco', 'Baltimore', 'Miami', 'Douglas', 'Boston', 'Califonia']}
df = pd.DataFrame(raw_data)
df

>

전체 데이터

 

  • .head(n): 처음 n개의 데이터 추출, 기본값 = 5
  • .tail(n): / 마지막 n개의 데이터 추출, 기본값=5
df.head()

>

전체 데이터 중 맨 처음부터 5개 추출

 

  • .T: 전치행렬로, 행과 열 바꿔서 데이터 추출
df.T

>

이때 인덱스 열이 행 제목으로 바뀌고 행 제목이 인덱스 열 위치로 바뀐다.

 

  • df[["열이름1", "열이름2",...]]: 특정 열의 데이터를 DataFrame객체로 추출
  • df["열이름"]: 열이름을 하나만 지정하려면 []하나만 쓰고, Series객체로 추출
type(df['age'])

>pandas.core.series.Series

type(df[['age']])

>pandas.core.frame.DataFrame

 

  • df[index]: index열의 값을 기준으로 데이터를 추출하여 [행, 열]과 같이 쓰지는 못한다.
df[1, 2]

>~~~KeyError: (1, 2)

 

  • df[["열이름1", "열이름2",...]][index]: 행과 열 모두 사용하여 데이터 추출
df[['age', 'city']][:2]

>

 

  • 특정 열 값을 인덱스 값으로 변경
    df.index = df["열이름"]: index열을 '열이름'의 열로 바꿈 
    del df["열이름"]: '열이름'의 열 삭제

*이때 원본 데이터가 바뀌므로 주의!

df.index = df['age']
del df['age']
df

>

이때 원본 데이터가 바뀌게 된다.

(아래 예시들의 df는 index를 바꾸고 age열을 삭제하기전의 df를 사용한다.)

 

  • df.loc[[index], [열이름]]: [행, 열]로 데이터를 추출한다고 생각하면 된다. 이때 index범위로 추출하려면 []를 쓰지 않고 slicing하면 된다. --> ex) df.loc[index:, [열이름]]
df.loc[3:, ['city', 'age']]

>

index범위 부여

df.loc[[3], ['city', 'age']]

>

하나의 index값

 

  • df.iloc[행, 열]: (0부터 시작하는)행과 열 위치값으로 데이터 추출하는데, 이때 index와 열 이름은 행과 열에 포함되지 않는다!
df.iloc[:, :2]

>

열 이름과 index를 포함하지 않는 인덱스 값으로 추출하며 slicing도 가능해서

머신러닝에서 필요한 feature값을 추출하거나 가중치값을 추출할때 자주 쓰인다. 

 

  • .reset_index(): 새로운 index 할당된 객체 생성
df.reset_index()

>

이때 원본 데이터는 바뀌지 않는다.

 

  • 행 제거: .drop(index): 해당 index를 삭제한 새로운 객체를 생성한다. 원본 데이터를 바꾸려면 매개변수 inplace=True로 설정하면 되는데, 이 방법은 pandas객체의 공통적인 특징이다.
df.drop(2, inplace=True)

>

(아래의 예시들은 원본 데이터에 영향을 끼치지 않은 것으로 사용한다.)

 

  • 열 제거: 매개변수로 axis=1 추가
    .drop("열이름", axis=1): 한개의 열만 제거
    .drop(["열이름1", "열이름2",...], axis=1): 여러개의 열 제거

마찬가지로 원본 데이터에 변화가 적용되려면 inplace=True로 설정해주면 된다.

df.drop('age', axis=1)

>

age열이 삭제되었다.

df.drop(['first_name', 'last_name'], axis=1)

>

first_name열과 last_name열이 삭제되었다.