자신에게 친절할 것 :)

Data Science/Pandas

[Pandas] DataFrame 값 수정/추가/삭제, header/index 명 지정하기

Tashapark 2024. 5. 28. 18:38
728x90

#코드잇 데이터 사이언스 강의 듣는 중


<데이터 값 바꾸기>

 

- 데이터를 바꾸려면 이름 지정하고 = 바꿀 값 넣어주면 됨. 

- [] 로 여러 값들 변경이 가능.

- 한 값으로 여러 값들을 통일 할 경우 []에 갯수 맞춰서 하나씩 넣어도 되지만, 그보다는 리스트 밖으로 빼주면 더 간단함. 

iphone_df.loc['iPhone 8', '메모리'] = '2.5GB'

#행 한 줄 전부 변경
iphone_df.loc['iPhone 8'] = ['2016-06-31', '5.5', '4GB', 'iOS 11.0', 'No']

# 같은 값으로 변경
iphone_df['디스플레이'] = '5.2 in'
#iphone_df['디스플레이'] = ['4.7 in', '4.7 in','4.7 in','4.7 in','4.7 in','4.7 in','4.7 in']

#여러 벡터 동시에 변경
iphone_df[['디스플레이', 'Face ID']] = 'x'

#로도 마찬가지
iphone_df.loc[['iPhone 7', 'iPhone X']] ='o'

#슬라이싱도 같음
iphone_df.loc['iPhone 7':'iPhone X'] ='o'

 

 

- 조건문으로 가지고 올 수 있고, 마찬가지로 한 값으로 변경 가능

iphone_df.loc[iphone_df['디스플레이'] > 5] = 'p'
iphone_df

 

 

+ 다만 동시에 변경이 되면서 갑자기 타입 에러가 뜰 수 있는데, 이 때는 이미 변경되었을 수 있으니,

df 값 확인해보고 df.dtypes 로 정확히 알아 볼 것. 

++ 추가로 플로트로 타입 변경하는  법 (파이썬으로 그냥.. 냅다 하면.. 안됨.. 다른 언어랑 다 섞임. 

- 2개 방법 있음. 

# .astype() 
df['column_name'] = df['column_name'].astype(float)

# .to_numeric()
df['column_name'] = pd.to_numeric(df['column_name'])

 

- 위치로도 가지고 올 수 있음. 

- 제발 헷갈리지 말 것 [[앞쪽 = 로우], [뒤쪽 = 벡터] ] --> 그 안에 몇 개가 있건 위치로 보는 것. 

예.  iphone_df.iloc[[1, 3], [1,4]] --> 로우 1, 3번의 벡터 1,4번을 각각 가지고 오는 것. 

iphone_df.iloc[[1, 3], [1,4]] = 'v'
iphone_df


<데이터 값 추가하기>

 

- data frame에 값을 추가하려면,  그냥 변수 명을 치고 = 값을 넣어주면 됨. 

--> 즉, 기존에 없는 칼럼 명이면 데이터를 추가하는 것이고, 기존에 있는 변수 명이면 값을 수정 하는 것. 

#행
iphone_df.loc['iPhone XR'] = ['2018-10-26', 6.1, '3GB', 'iOS 12.0.1', 'Yes']

#열
iphone_df['제조사'] = 'Apple'

 

 


<데이터 값 삭제하기>

 

- 삭제하려면, .drop('변수 명')

- 필요에 따라서 axis = 'index/columns', inplace=True/False를 추가해주면 됨.

- axis= 'index' or 0 --> 로우를 뜻 함

- axis = columns  or 1--> 벡터 

 

- inplace= False

--> 로 데이터를 변경하는 게 아니라 이번 데이터 프레임에서만 삭제 됨을 의미함. 계속 쓰고 싶다면 변수 지정하면 됨. 

-->  True로 하면, 로 데이터를 변경해줌. 

iphone_df.drop('iPhone XR', axis= 'index', inplace= False)
iphone_df.drop('제조사', axis= 'columns', inplace= True)

 

- axis를 따로 써주지 않아도 바로 columns = '칼럼명' 넣어줘도 충분함. 

--> 디폴트 값이 index 즉 로우 값을 삭제하는 것이기 때문

loan_df.drop(columns='married')

#같음
loan_df.drop('married', axis=1)

 

+ inplace 대신 값에 다시 넣어줘도 됨. 

loan_df = loan_df.drop(columns='married')

 

- 여러 개는 리스트에 넣어서 한 번에 삭제하면 됨. 

iphone_df.drop(['iPhone 7', 'iPhone 8', 'iPhone X'], axis= 'index', inplace= True)

 

 


<index로 지정하기>

.set_index()  --> 특정 벡터를 인덱스로 지정 가능. 

loan_df.set_index('loan_id')

 

 

 

 

 

 

 

 

 

 

 

- but, 재실행 하면, 다시 이전으로 돌아감.

- 변경 사항을 그대로 유지하게 하려면 1) 원래의 변수에 다시 넣어줘야 함. 

loan_df = loan_df.set_index('loan_id')

 

- 다시 되돌리려면, .reset_index()를 해주면 됨. 

loan_df.reset_index()

 

-  혹은 2) inplace =  True 를 추가할 것.

liverpool_df.set_index('Number', inplace = True)

 

++ 리뉴얼 강의에서는 inplace 설명을 안 하시고, 계속 원래 변수에 넣어줌.. 

왜 그러는 것임?


<header 명 변경하기 / index 명 추가하기>

 

- header 명 변경하기  .rename()

- python dictionary 사용.

- index 명을 추가 할 수 있음. .index.name

# 한 개만 변경 
liverpool_df.rename(columns = {'position' : 'Position'}, inplace = True)

# 여러 개도 그냥 변경하면 됨 
liverpool_df.rename(columns = {'position' : 'Position', 'born' : 'Born', 'number':'Number', 'nationality':'Nationality'}, inplace = True)

#이걸 따로 변수로 넣어줘도 됨
new_columns = {'married_or not' :' married', 'self_employed or not': 'self_employed', 'applicant_income': 'income', 'loan_amount':'amount'}
loan_df.rename(columns=new_columns)


#인덱스 명 추가
liverpool_df.index.name = 'Player Name'

 

 

 - index로 지정하기 --> .set_index()

--> 그 전에 기존 값을 칼럼에 추가해줘야 함.  안 그러면 밀려서 기존 인덱스가  사라짐. 

liverpool_df.index --> 위에서 이미 지정되어 있는 값을 새로운 칼럼으로 추가해서 넣어줌. 

liverpool_df['Player Name'] = liverpool_df.index

 

 

 

++ 인덱스는 겹칠 일이 없는 것으로 사용하는 것이 좋음.

이 경우는 이름은 우연히 겹칠 수도 있기 때문에 등 번호가 best

 

+++ .reset_index()를 사용하면, 자연스럽게 기존의 인덱스가 뒤로 빠지지만,

행 번호가 맨 앞에 생기기 때문에 행 번호 필요없으면 따로 처리해 줘야 함. 

liverpool_df.reset_index('Number')

 


<칼럼 type 변경하기 >

 

.astype('')

loan_df['income'].astype('float')

 

-->  int(정수), float(실수), object(문자형) 등 으로 원하는 형태로 변경해주면 됨. 

728x90
반응형