Pandas:DataFrame:구조 조작

판다스에 관한 정보들을 틀:Pandas:DataFrame을 통해 체계화하여 관리한다.

  1. Pandas:DataFrame:개요
  2. Pandas:DataFrame:구조 파악
    1. Pandas:DataFrame:데이터에 접근하기
  3. Pandas:DataFrame:구조 조작
    1. Pandas:DataFrame:구조 조작. 열 관련
    2. Pandas:DataFrame:데이터 합치기
    3. Pandas:DataFrame:데이터 통계
    4. Pandas:DataFrame:데이터 타입
    5. Pandas:DataFrame:데이터 조작(파생변수)
      1. Pandas:DataFrame:행 연산
  4. Pandas:DataFrame:다른 형태로 저장하고 불러오기
    1. Pandas:DataFrame:DataBase
  5. Pandas:DataFrame:활용
    1. 결측치 다루기:pandas
    2. 이창치 다루기:pandas
  6. Pandas:DataFrame:관련 에러

1 개요편집

데이터의 전체 구조를 조작하는 방법에 대해.

2 지우기편집

의도 설명 방법
열 삭제 칼럼을 삭제한다. 시리즈로 변환하여 반환한 후 삭제한다. col = df.pop('열이름')
열 삭제 그냥 삭제. df.del('열이름')

df.drop(columns = '열이름')

df.drop(columns = ['열1', '열2', ...]) # 여러 개의 열을 지울 경우.

3 자르기편집

데이터프레임을 df[:숫자] 형태로 자르고 나면, 인덱스가 그대로 남는다. 이 인덱스를 초기화하기 위해선 다음과 같이 진행한다.

df.reset_index(inplace=True, drop=True)  # drop을 안하면 기존 인덱스가 새로운 열로 남는다.
의도 설명 방법
행 분할 유의. 가장 마지막까지 가져온다는 의미로 -1을 넣기도 하는데, range와 같은 방식으로 작동하는지, -2의 값을 가져온다.

때문에 불편하지만 len(df)를 이용하는 편이 정신건강에 좋다.( :를 쓰는 호출이 아니라면 -1이 잘 먹힌다.)

df = df[시작번호:끝번호]

4 붙이기편집

4.1 리스트 붙이기편집

리스트를 행으로 붙이고 싶을 때. 기본적으로 리스트는 열로 인식하므로, 행을 추가하고 싶다면 시리즈로 변환하여 추가해야 한다.

의도 설명 방법
리스트를 df에 마지막 행으로 붙인다. 리스트를 가장 아래 행으로.
# 붙이기 위해 리스트를 시리즈화 한다.
a = pd.Series(item, index=df.columns)  # index=df.columns이 없으면 새로운 열을 만들어 붙인다.
df = df.append(a,
            ignore_index=True)  # 인덱스를 무시하고 df에 순차적으로 넣고 싶은 경우.

4.2 dataframe끼리 붙이기편집

[아직 완성하지 않음;;;]

4.3 끼어넣기편집

의도 설명 방법
열을 중간에 삽입 df.insert(끼워넣을 열 번호, '열이름', 내용)

5 행 선택편집

의도 설명 방법
인덱스로 선택 인덱스가 순차적인 데이터인 경우. df.loc[시작인덱스:끝인덱스]
순서로 선택 인덱스가 아닌, df의 순서로 선택할 경우. df.iloc[시작번호:끝번호]

6 열 선택편집

의도 설명 방법
인덱스로 선택 이중대괄호로 선택하는 경우는 dataframe으로,

대괄호 하나로 선택하는 경우엔 series로 추출한다.

df.loc[:, ['열이름', '열이름2', ...]]

df[['열이름', '열이름2', ...]] # dataframe으로 반환

df['열이름', '열이름2', ...] # series로 반환

순서로 선택 인덱스가 아닌, df의 순서로 선택할 경우. 처음의 :는 모든 행에 대해 선택한다는 의미.

df.iloc[:, [1,2,3,5,6,...]]

연속된 걸 선택할 땐 다음과 같이.

df.iloc[:, 0:3]

칼럼 순서 바꾸기
데이터프레임2 = DataFrame(데이터프레임1, columns=[열이름1, 열이름2, ...])

7 데이터 프레임끼리의 연산편집

사칙연산 뿐 아니라 ==, !=, > 등의 논리연산도 가능하다. 기본적으로 칼럼과 레이블이 같은 위치의 값들끼리 연산한다.

7.1 열 조작편집

의도 방법 설명
열 선택 df.[['열1', '열2', ...]] 해당 df에서 열을 선택하는 방법.

열이 1개일 땐 대괄호 하나에 열이름으로 선택이 되지만, 2개 이상일 땐 대괄호 2개로 묶어주어야 한다.

열 리스트 얻기 df.columns 어떤 칼럼이 있는지 알려준다.
열 이름 바꾸기 데이터프레임.rename(columns={'구이름':'신이름', '구이름2':'신이름2'}, inplace=True) inplace=True 이 옵션이 뭔진 모르겠네;; 숫자칼럼을 바꾸려면 붙어야 적용이 된다.
열 순서 바꾸기 및 추출 df[['열이름1', '열이름2']] 열이름에 해당하는 순서로 해당 열들만 추출된다.
열 제거 df = df.drop(columns='열이름')
열 붙이기 df['새로운 칼럼'] = 칼럼 행의 크기가 같은 칼럼을 붙일 수 있다.
새로운 칼럼 만들기 df['새 칼럼'] = df['열이름'].rank() 크기가 같은 칼럼을 만든 후 덧붙일 수 있다.
최댓값 구하기 df['열이름'].max()
최댓값의 인덱스 df['열이름'].idxmax()
최솟값 구하기 df['열이름'].min()
정규화 norm(df, '열이름') 최솟값을 0, 최대값을 1로 정규화한다.

전체 데이터에서 최솟값을 빼고, 최댓값과 최솟값의 차로 나눈다.

7.2 파생변수 만들기편집

데이터프레임 행별 연산을 통해 파생변수를 만들 수 있다.

의도 설명 방법
대괄호로 생성
  • 행별 연산을 통해 새로운 열 생성.
  • np.where로 조건문의 사용도 가능하다.
df['새로운열'] = df['열1'] + df['열2']
assign으로 생성 위와 동일. df.assign(새로운열1 = df['열1'] + df['열2'], 새로운열2 = 연산...) # 새로운 열은 따옴표로 감싸지 않는 것에 유의.

8 정렬편집

의도 설명 방법
특정 열을 기준으로 정렬 기본적으로 오름차순.

ascending=False 옵션을 주면 내림차순.

  • df.sort_values('열이름', inplace=True, ascending=False)
  • df.sort_values(['열1', '열2', ...], inplace=True, ascending=[Ture, False, ...]) # 여러 열에 대하여 각각의 정렬조건을 지정 가능. 앞에서부터 정렬한다.