본문 바로가기
파이썬 - 분석 라이브러리

[파이썬] 시리즈를 데이터프레임으로 만들기

by myoongs 2024. 6. 9.

단일 시리즈는 to_frame()으로,

다수의 시리즈는 pd.DataFrame() 혹은 pd.concat()을 사용하여 데이터프레임으로 만들어줄 수 있다.

 

단일 시리즈 → 데이터프레임

단일 시리즈를 데이터프레임으로 만들어 준다면 아래 형식을 사용하면 된다.

 

    시리즈명.to_frame(name='열이름')

 

아래는 시리즈 s1을 데이터프레임으로 변환하기 위한 코드의 예시다.

# 시리즈 -> 데이터프레임 변환
df=s1.to_frame(name='점수')
print('\n<<데이터프레임>>')
print(df,type(df))

 

아웃풋 이미지의 첫번째 부분은 s1이 시리즈였을 때의 결과고,

두번째 부분은 데이터프레임 df로 변환한 후의 모습이다.

데이터프레임으로 변환할 때 열이름을 '점수'로 지정해주었다.

 

각 케이스의 데이터 타입으로 변환 성공 여부를 리체크해보면,

시리즈때는 < class 'pandas.core.series.Series' > 가 떠서 Series 임을,

데이터프레임로 변환 후에는 < class 'pandas.core.frame.DataFrame' > 이 뜬다. DataFrame으로 성공적으로 변경된 것을 확인할 수 있다.

 

다수의 시리즈 → 데이터프레임

여러 시리즈를 하나의 데이터프레임으로 병합할 수 있는 방법 2가지를 정리해보겠다.

 

1) pd.DataFrame( ) 

pd.DataFramae()으로 시리즈를 데이터프레임으로 만드는 방법은 딕셔너리를 데이터프레임으로 바꿀 때와 동일하다.  

 

기본형식은 아래와 같다. 

    pd.DataFrame({'열이름1':시리즈1, '열이름2':시리즈2, ..., '열이름n':시리즈n})

df=pd.DataFrame({'이름':s1,'성별':s2,'직업':s3})
print(df)

 

2) pd.concat( ) 

pd.concat의 concat은 concatenate의 약어다.

연결시킨다는 뜻을 가진 concatenate은 의미 그대로 여러 시리즈를 연결시켜 하나의 데이터프레임으로 만들어준다.

참고로 다수의 데이터프레임도 pd.concat을 통해 하나의 데이터프레임으로 만들어줄 수 있다.

 

기본 형식은:

   (A) 열 기준으로 결합할 때:

    pd.concat([시리즈1, 시리즈2, ..., 시리즈n], axis=1)

    ** axis=1 은 열을 기준으로 각 시리즈를 쌓겠다는 의미다. 즉, 각 시리즈가 개별 열이 되어 데이터프레임으로 병합된다.

 

   (B) 행 기준으로 결합할 때:

    pd.concat([시리즈1, 시리즈2, ..., 시리즈n], axis=0)

    ** axis=0 혹은 함수에 axis 부분을 누락한다면 각 시리즈가 개별 행이 되어 데이터프레임으로 병합된다.

 

아래는 열 기준 병합하였을 때의 예시다.

# 다수의 시리즈 -> 데이터프레임 (pd.concat() 사용)
df1=pd.concat([s1,s2,s3],axis=1) # 열 기준 결합
df1.rename(columns={0:'이름',1:'성별',2:'직업'},inplace=True)
print(df1)

 

열이름은 .rename(columns={'기존 열이름':'변경할 열이름', ... }) 으로 지정해주었다.

inplace=True는 원본 데이터에 적용시킨다는 뜻이다.

 

 

아래는 행 기준으로 병합했을 때다.

# 다수의 시리즈 -> 데이터프레임 (pd.concat() 사용)
df2=pd.concat([s1,s2,s3],axis=0) # 행 기준 결합
print(df2)

 

행 기준으로 병합했을 때 인덱스 넘버가 이상하게 섞여서 나온다.

각 시리즈의 인덱스가 병합될 때 그대로 유지되며 넘어온 것인데, 인덱스의 넘버링이 순차적으로 들어가도록 정리해주고 싶다면 .reset_index(drop=True) 를 써주면 된다.

 

데이터프레임명.reset_index(drop=True) 적용하면 아래와 같이 인덱스가 정리된다.

df2=df2.reset_index(drop=True)
print(df2)

 

반응형