조금씩 꾸준히 완성을 향해

[Pandas] DataFrame 객체 생성과 변경 본문

Python/Numpy & Pandas

[Pandas] DataFrame 객체 생성과 변경

all_sound 2022. 9. 25. 10:23

DataFrame 객체

  • 데이터 테이블 전체를 지칭하는 객체
  • 넘파이 배열의 특성을 그대로 가짐
  • indexing : 열과 행 각각 사용하여 하나의 데이터에 접근

데이터프레임 생성

  • 딕셔너리 타입 데이터에서 Key는 열이름, Value는 시퀀스형 데이터 타입을 넣어 각 열의 데이터로 만듦
# dictionary > DataFrame
datas = {'나이': [15, 17], '성별': ['남', '여'], '학교': ['덕영중', '수리고']}
pd.DataFrame(datas, index=['준서', '예은'])

  • 리스트 타입 데이터에서 행과 열을 별도로 지정해서 데이터 프레임 생성
# List > DataFrame
datas = [[15, '남', '덕영중'], [17, '여', '수리고']]
pd.DataFrame(datas, index=['준서', '예은'], columns=['나이', '성별', '학교'])

  • 행 인덱스/열 이름 지정하여 데이터프레임 만들기
raw_data = {'first_name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
            'last_name': ['Miller', 'Jacobson', 'Ali', 'Milner', 'Cooze'],
            'age': [42, 52, 36, 24, 73],
            'city': ['San Francisco', 'Baltimore', 'Miami', 'Douglas', 'Boston']}
df = pd.DataFrame(raw_data, columns = ['first_name', 'last_name', 'age', 'city']) #열 지정
df
print(df.index)  # 행 인덱스 확인 
# RangeIndex(start=0, stop=5, step=1)

print(df.columns)   # 전체 열 확인
# Index(['first_name', 'last_name', 'age', 'city'], dtype='object')

print(df.columns[1])  # 2열 확인
# last_name

  • 데이터 생성시, 열 이름을 한정하면 해당 열만 추출
# age, city 열만 추출해서 DataFrame 생성
pd.DataFrame(raw_data, columns = ['age', 'city'])

  • 데이터가 존재하지 않는 열을 추가하면 해당 열에는 NaN 값들 추가
pd.DataFrame(raw_data, columns=['first_name', 'last_name', 'age', 'city', 'dabt'])

데이터프레임 변경

  • 행 인덱스, 열 이름 변경하기
df.index = ['student1', 'student2', 'student3', 'student4', 'student5']
df.columns = ['이름', '성', '나이', '지역']
print(df)  # 데이터프레임 출력
print(df.index)  # 행 인덱스 확인
print(df.columns)  # 열 이름 확인

  • 변경하고 싶은 행, 인덱스 지정해서 변경

- rename() : 원본 객체를 변경하려면 inplace=True 옵션 사용

df.rename(columns={'나이': '연령', '지역': '도시', '성': 'In', '이름': 'fn'}, inplace=True) 
#inplace=True로 설정하면 원본 변경
print(df)

df.rename(index={'student1': '학생1', 'student2': '학생2'}, inplace=True)
print(df)

df.rename({'student3': '학생3'}, axis=0, inplace=True) # 0의 축 기준으로(행 이름)변경
print(df)

df.rename({'student4': '학생4'}, inplace=True)  # default는 axis=0
print(df)

df.rename({'연령': '나이'}, axis=1, inplace=True) # 1의 축 기준으로(열 이름)변경
print(df)