"Pandas:DataFrame:구조 조작"의 두 판 사이의 차이

Pywiki
둘러보기로 가기 검색하러 가기
 
1번째 줄: 1번째 줄:
 +
{{Pandas:DataFrame}}
 +
 
== 개요 ==
 
== 개요 ==
 
데이터의 전체 구조를 조작하는 방법에 대해.
 
데이터의 전체 구조를 조작하는 방법에 대해.
60번째 줄: 62번째 줄:
 
=== dataframe끼리 붙이기 ===
 
=== dataframe끼리 붙이기 ===
 
[아직 완성하지 않음;;;]
 
[아직 완성하지 않음;;;]
{| class="wikitable"
 
!의도
 
!설명
 
!방법
 
|-
 
|위아래로 붙이기
 
|두 df를 아래로 이어붙이기.
 
df 목록은 리스트로 준다.
 
|df = pd.concat([df, df2])
 
|-
 
|옆으로 붙이기
 
|
 
|df = pd.concat([df, df2], axis=1)
 
|-
 
|기존 인덱스 무시하고 붙이기
 
|
 
|concat에 <code>ignore_index=True</code> 옵션을 준다.
 
|}
 
 
 
=== 끼어넣기 ===
 
=== 끼어넣기 ===
 
{| class="wikitable"
 
{| class="wikitable"
177번째 줄: 160번째 줄:
 
|크기가 같은 칼럼을 만든 후 덧붙일 수 있다.
 
|크기가 같은 칼럼을 만든 후 덧붙일 수 있다.
 
|-
 
|-
|같은 인덱스를 사용하는 데이터의 열 추가.
 
|df = pd.merge(df1, df2, how='옵션', left_index=True, right_index=True)
 
 
|
 
|
{| class="wikitable"
+
|
!옵션
+
|
!의미
 
|-
 
|how
 
|inner : 양쪽에 모두 있는 인덱스만 합친다.
 
outer : 한쪽에만 있는 인덱스라도 합친다
 
|-
 
|left_index = True
 
|좌측의 인덱스 기준으로 합친다.
 
|-
 
|right_index = True
 
|우측 기준. 거의 양쪽 다 True 옵션을 준다.
 
|}
 
 
|-
 
|-
 
|최댓값 구하기
 
|최댓값 구하기

2023년 2월 1일 (수) 13:01 기준 최신판

판다스에 관한 정보들을 틀: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, ...]) # 여러 열에 대하여 각각의 정렬조건을 지정 가능. 앞에서부터 정렬한다.