17. 데이터프레임 응용 - 열 재구성

김동웅·2021년 9월 4일
0

Pandas with python

목록 보기
17/23

1. 열 순서 변경

  • 데이터프레임의 열 순서 변경 : DataFrame 객체[재구성한 열 이름의 리스트]

import seaborn as sns

titanic = sns.load_dataset('titanic')
df= titanic.loc[0:4,'survived':'age']
print(df,'\n')
   survived  pclass     sex   age
0         0       3    male  22.0
1         1       1  female  38.0
2         1       3  female  26.0
3         1       1  female  35.0
4         0       3    male  35.0

columns = list(df.columns.values)
print(columns,'\n')
['survived', 'pclass', 'sex', 'age']

sorted() 함수에 columns 변수를 입력하면 열 이름이 알파벳 순으로 정렬된다.

  • list.sort()은 list을 그 자리에서 정렬하고 목록 인덱스를 변경하고 None을 반환한다. 반면 sorted()는 새로운 정렬된 목록을 반환하며, 원래 목록은 영향을 받지 않는다.

columns_sorted = sorted(columns)
df_sorted = df[columns_sorted]
print(df_sorted,'\n')
    age  pclass     sex  survived
0  22.0       3    male         0
1  38.0       1  female         1
2  26.0       3  female         1
3  35.0       1  female         1
4  35.0       3    male         0 

reversed() 함수에 columns 변수를 전달하면 기존 순서의 정반대 역순으로 정렬된다.

  • list.reverse()은 list을 그 자리에서 오름차순이나 내림차순이 아닌 정반대로 정렬하고 목록 인덱스를 변경하고 None을 반환한다. 반면 reversed()는 새로운 정렬된 목록을 반환하며, 원래 목록은 영향을 받지 않는다.
    age     sex  pclass  survived
0  22.0    male       3         0
1  38.0  female       1         1
2  26.0  female       3         1
3  35.0  female       1         1
4  35.0    male       3         0

sort나 reverse를 하지않고 사용자 임의의 순서로 재배치 할 수도 있다.

columns_customed = ['pclass','age','sex','survived']
df_customed = df[columns_customed]

2. 열 분리

  • 하나의 열이 여러가지 정보를 담고 있을때 각 정보를 서로 구분해서 사용하는 경우가 있다.
    예를들어, 연월일 정보가있을때 연,월,일을 구분하여 3개의 열을 만드는 것이나, 사람의 이름이 들어있는 열을 '성'과 '이름'으로 구분하는 것을 예로 들수 있다.

  • astype() 으로 시간형 데이터를 문자열로 변경
  • split() 으로 '-' 분리

import pandas as pd

df = pd.read_excel(r'data_analysis\sample\part6\주가데이터.xlsx',engine='openpyxl')

print(df.head())
print(df.dtypes,'\n')

df['연월일']=df['연월일'].astype('str')
dates = df['연월일'].str.split('-')

print(dates.head())
         연월일   당일종가  전일종가     시가     고가     저가     거래량
0 2018-07-02  10100   600  10850  10900  10000  137977
1 2018-06-29  10700   300  10550  10900   9990  170253
2 2018-06-28  10400   500  10900  10950  10150  155769
3 2018-06-27  10900   100  10800  11050  10500  133548
4 2018-06-26  10800   350  10900  11000  10700   63039
연월일     datetime64[ns]
당일종가             int64
전일종가             int64
시가               int64
고가               int64
저가               int64
거래량              int64
dtype: object
0    [2018, 07, 02]
1    [2018, 06, 29]
2    [2018, 06, 28]
3    [2018, 06, 27]
4    [2018, 06, 26]
  • dates 변수에 저장된 문자열의 리스트의 원소를 선택하기 위해 get()메소드를 활용한다.

시리즈의 문자열 리스트 인덱싱 : Series 객체.str.get(인덱스)



df['연'] = dates.str.get(0)
df['월'] = dates.str.get(1)
df['일'] = dates.str.get(2)

df.drop('연월일',axis=1,inplace=True)
print(df.head())
    당일종가  전일종가     시가     고가     저가     거래량     연   월   일
0  10100      600      10850 	10900  10000   137977  	  2018  07  02
1  10700      300      10550  	10900   9990  170253  	  2018  06  29
2  10400      500      10900  	10950  10150  155769  	  2018  06  28
3  10900      100      10800  	11050  10500  133548  	  2018  06  27
4  10800      350      10900  	11000  10700   63039  	  2018  06  26

0개의 댓글