머신러닝(MachineLearning)/판다스(Pandas)

DataFrame 데이터셋 수정하기

Danny1231 2022. 6. 26. 14:48
  • DataFrame과 리스트, 딕셔너리, 넘파이 ndarray 상호변환

ndarray를 DataFrame으로 변환하기

array = np.array([[90, 85, 78],[95, 60, 85], [80, 100, 88]])
df_array = pd.DataFrame(array, columns=['A', 'B', 'C'])
print(df_array)

실행 결과

 

리스트를 DataFrame으로 변환하기

import pandas as pd
lst = [[90, 85, 78],[95, 60, 85], [80, 100, 88]] # 2차원 리스트
df_lst = pd.DataFrame(lst, columns=['A', 'B', 'C']) # columns에 열 이름 입력
print(df_lst)

실행 결과

딕셔너리를 DataFrame으로 변환하기

dic = {
    'A': [90, 95, 80], 
    'B': [85, 60, 100], 
    'C': [78, 85, 88]
}
df_dic = pd.DataFrame(dic)
print(df_dic)

실행 결과

딕셔너리의 Key 값에는 DataFrame의 열 이름을, Value 값에는 열의 데이터를 입력하면 된다.

 

DataFrame을 ndarray로 변환하기

array = df_array.values
print(array)

실행 결과

DataFrame객체의 values를 이용하면 ndarray로 변환할 수 있다.

 

DataFrame을 리스트로 변환하기

lst = df_lst.values.tolist()
print(lst)

실행 결과

 tolist()를 이용하여 변환된 ndarray를 리스트로 나타내면 된다. 

 

DataFrame을 딕셔너리로 변환하기

dic = df_dic.to_dict()
print(dic)

실행 결과

DataFrame객체의 to_dict() 메서드를 이용하면 딕셔너리로 변환된다. 괄호 안에 'list'를 넣어주면 리스트형으로 변환된다.

 

  • DataFrame의 열 데이터 생성 및 수정
    DataFrame의 []연산자를 통해 데이터셋을 생성하거나 수정할 수 있다. 
titanic_df = pd.read_csv('train.csv')

앞에서 다뤘던 타이타닉 데이터를 불러온 것이다.

# SibSp열과 Parch열의 값의 합을 저장한 FamilyNumber열을 생성
titanic_df['FamilyNumber'] = titanic_df['SibSp'] + titanic_df['Parch']
# SibSp열 데이터 수정하기
titanic_df['FamilyNumber'] *= 10
titanic_df

실행 결과

'FamilyNumber'열을 생성하여 'Sibsp'와 'Parch'의 합을 저장하고, 10을 곱하여 열 데이터를 수정한 결과이다. 1행의 'SibSp'와 'Parch'의 합 1의 10배인 10이 'FamilyNumber'열 1행에 저장된 것을 볼 수 있다. 다른 모든 행들도 마찬가지이다.

 

  • DataFrame에서 데이터 삭제하기
    데이터를 삭제하고자 할 때는 DataFrame의 drop()메서드를 이용한다. drop() 메서드의 중요한 파라미터는 labels, axis, inplace이다.
    labels에는 삭제할 행 또는 열을 입력한다(여러개를 삭제할 때는 리스트로 입력한다). 
    axis 0은 행 축, 1은 열 축을 의미한다. 따라서 0을 입력하면 행을, 1을 입력하면 열을 삭제한다.
    inplace의 값의 default값은 False이다. 이 경우 원본 DataFrame에 데이터를 삭제한 결과를 반영하지 않고, 데이터가 삭제된 새로운 DataFrame을 반환한다. True일 경우 원본 DataFrame에 데이터를 삭제한 결과를 반영하고, 반환값은 None이다.
print('inplace=True로 drop한 후 반환된 값:', titanic_df.drop('FamilyNumber', axis=1, inplace=True))
titanic_df.head(3)

실행 결과

inplace=True 이므로 원본 DataFrame에 위에서 추가했던 FamilyNumber 열이 삭제된 것을 확인할 수 있다.