본문 바로가기
개발일지/Pandas

pandas (판다스) 기초 10 세로배열재정의zip, Series, add rows 다중 열 추가

by 다니엘의 개발 이야기 2022. 7. 18.
320x100
# Series 생성
df2 = pd.Series(index = player, data = nationality, name = 'Nationality').to_frame()
df2


'''
	Nationality
(Argentina, FC Barcelona, False, 1.7, 45)	Argentina
(Portugal, Juventus FC, False, 1.87, 44)	Portugal
(Brasil, Paris SG, False, 1.75, 28)	Brasil
(France, Paris SG, True, 1.78, 21)	France
(Germany, FC Bayern, True, 1.93, 0)	Germany
'''​
# Creating DataFrames from Scratch with pd.DataFrame()
## Having Columns in place

import pandas as pd

player = ['Lionel Messi', 'Cristiano Ronaldo', 'Neymar Junior', 'Kylian Mbappe', 'Manuel Neuer']
nationality = ['Argentina', 'Portugal', 'Brasil', 'France', 'Germany']
club = ['FC Barcelona', 'Juventus FC', 'Paris SG', 'Paris SG', 'FC Bayern']
world_champion = [False, False, False, True, True]
height = [1.70, 1.87, 1.75, 1.78, 1.93]
goals = [45,44,28,21,0]
dic = {'Player':player, 'Nationality':nationality, 'Club':club,
      'World_Champion':world_champion, 'Height':height, 'Gorls_2018':goals}
dic
df = pd.DataFrame(data = dic)
df

'''
Player	Nationality	Club	World_Champion	Height	Gorls_2018
0	Lionel Messi	Argentina	FC Barcelona	False	1.70	45
1	Cristiano Ronaldo	Portugal	Juventus FC	False	1.87	44
2	Neymar Junior	Brasil	Paris SG	False	1.75	28
3	Kylian Mbappe	France	Paris SG	True	1.78	21
4	Manuel Neuer	Germany	FC Bayern	True	1.93	0
'''
# Player를 행 인덱스의 기준으로 잡아주기
players = df.set_index('Player')
players


## Having Rows in place (zip 함수 이용)

# zip은 각각 리스트화 되어있는 1,2,3,4,5 의 숫자리스트와 a,b,c,d,e 와 같은 리스트를 세로 배열로 재정의하여 재 튜플화 해주는 함수다.
# (1,a), (2,b)와 같이
zipped = list(zip(nationality, club, world_champion, height, goals))

'''
[('Argentina', 'FC Barcelona', False, 1.7, 45),
 ('Portugal', 'Juventus FC', False, 1.87, 44),
 ('Brasil', 'Paris SG', False, 1.75, 28),
 ('France', 'Paris SG', True, 1.78, 21),
 ('Germany', 'FC Bayern', True, 1.93, 0)]
'''

# zip으로 특성을 정리해 주었다면, 그 특성들이 어디에 부여가 되는지도 정리해줘야한다.
player = zipped
# Lionel Messi

player[0]
# ('Argentina', 'FC Barcelona', False, 1.7, 45)
df = pd.DataFrame(data = player,
                 index = ['Lionel Messi', 'Cristiano Ronaldo', 'Neymar Junior', 'Kylian Mbappe', 'Manuel Neuer'],
                 columns = ['Nationality', 'Club', 'World_Champion', 'Height', 'Goals_2018']
                 )
df2['Club'] = club
df2


## Adding new Rows (hands-on approach)
### Adding one Row


players

'''
	Nationality	Club	World_Champion	Height	Gorls_2018
Player					
Lionel Messi	Argentina	FC Barcelona	False	1.70	45
Cristiano Ronaldo	Portugal	Juventus FC	False	1.87	44
Neymar Junior	Brasil	Paris SG	False	1.75	28
Kylian Mbappe	France	Paris SG	True	1.78	21
Manuel Neuer	Germany	FC Bayern	True	1.93	0
'''

# 기존에 Player라고 rows index에 기준으로 설정되어있는 값이 있었다.
players.reset_index(inplace=True)
players

'''
    Player	Nationality	Club	World_Champion	Height	Gorls_2018
0	Lionel Messi	Argentina	FC Barcelona	False	1.70	45
1	Cristiano Ronaldo	Portugal	Juventus FC	False	1.87	44
2	Neymar Junior	Brasil	Paris SG	False	1.75	28
3	Kylian Mbappe	France	Paris SG	True	1.78	21
4	Manuel Neuer	Germany	FC Bayern	True	1.93	0
'''

# reset_index를 통해서 해당 set_index가 해제되게 되고 general한 시트로 변경되게 된다.
# players의 5번 row index에 (6번째 자리에) []에 들어가는 자료들을 넣어주자.
players.loc[5, :] = ['Sergio Ramos', 'Spain', 'Real Madrid', True, 1.84, 5]
players


## Adding many Rows

new = pd.DataFrame(
    data = [
        ['Mohamed Salah', 'Egypt', 'FC Liverpool', False, 1.75, 44],
        ['Luis Suarez', 'Urguay', 'FC Barcelona', False, 1.82, 31]],
    columns = players.columns
)
new
# merge, concat과 같은 기능을 한다.
players = players.append(new, ignore_index = True)
players
300x250