HOWTO · Pandas
Pandas Series를 DataFrame으로 변환하는 방법
Pandas Series를 DataFrame으로 변환하는 방법을 소개합니다.
이 페이지의 내용
pandas.DataFrame()이나 pandas.Series.to_frame()을 사용하면 하나의 Pandas Series를 DataFrame으로 변환할 수 있습니다. 두 방법 모두 Series 인덱스를 DataFrame의 행 인덱스로 유지합니다. 값 열에 이름을 붙이려면 to_frame(name=...)을 사용하고, 기존 인덱스를 일반 열로 만들려면 reset_index(name=...)을 사용합니다. 여러 Series를 열로 결합하려면 pd.concat(..., axis=1)을 사용합니다.
예제에서는 다음 Series를 사용하며, 그 레이블이 각 변환에서 행 인덱스가 됩니다.
import pandas as pd
import numpy as np
np.random.seed(0)
df_series = pd.Series(
np.random.randint(0, 100, size=(10)),
index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)
print(df_series)
a 44
b 47
c 64
d 67
e 67
f 9
g 83
h 21
i 36
j 87
dtype: int64
pandas.DataFrame()을 사용해 하나의 Pandas Series를 DataFrame으로 변환하기
Series를 pandas.DataFrame()에 전달하면 열이 하나인 DataFrame이 생성됩니다. columns 인자는 값 열의 레이블을 설정합니다. Series 인덱스는 행 인덱스로 그대로 유지됩니다. 이 범용 생성자는 이미 다른 데이터로 DataFrame을 만들고 있을 때 유용합니다.
import pandas as pd
import numpy as np
np.random.seed(0)
df_series = pd.Series(
np.random.randint(0, 100, size=(10)),
index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)
print(pd.DataFrame(df_series, columns=["A"]))
A
a 44
b 47
c 64
d 67
e 67
f 9
g 83
h 21
i 36
j 87
결과 DataFrame은 이름이 A인 열 하나를 가지며, a부터 j까지의 레이블을 인덱스로 유지합니다.
입력이 이미 Series이고 생성 시점에 DataFrame 옵션을 지정하고 싶을 때 이 생성자를 사용합니다. columns 목록은 출력 열의 레이블을 제어하며, Series 인덱스를 대체하지는 않습니다. columns를 생략하면 pandas는 Series에 이름이 설정되어 있을 경우 그 이름을 값 열에 사용하고, 그렇지 않으면 0을 사용합니다.
pandas.Series.to_frame()을 사용해 하나의 Pandas Series를 DataFrame으로 변환하기
Series를 직접 열이 하나인 DataFrame으로 만들려면 Series.to_frame()을 호출합니다. name을 전달하면 값 열의 레이블을 선택할 수 있습니다. 이 메서드는 Series 인덱스를 유지하므로, 그 레이블로 행을 식별할 때 유용합니다.
하나의 Series에 대해 to_frame(name="A")은 pandas.DataFrame(series, columns=["A"])의 간결한 대안입니다. 특히 이 DataFrame을 다른 테이블과 결합하기 전에, 값을 설명하는 이름을 선택하세요. 이러한 변환은 Series 인덱스를 데이터 열로 바꾸지 않습니다. 그런 레이아웃에는 reset_index()를 사용합니다.
import pandas as pd
import numpy as np
np.random.seed(0)
df_series = pd.Series(
np.random.randint(0, 100, size=(10)),
index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)
print(df_series.to_frame(name="A"))
A
a 44
b 47
c 64
d 67
e 67
f 9
g 83
h 21
i 36
j 87
Series에 이름이 없으면 to_frame()은 값 열의 레이블로 0을 사용합니다. Series 인덱스도 열의 데이터로 필요하면 reset_index() 메서드를 사용합니다. 인덱스 축에 이름을 붙이면 첫 번째 출력 열이 index가 됩니다.
import pandas as pd
import numpy as np
np.random.seed(0)
df_series = pd.Series(
np.random.randint(0, 100, size=(10)),
index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
).rename_axis("index")
print(df_series)
print("\n")
print(df_series.reset_index())
index
a 44
b 47
c 64
d 67
e 67
f 9
g 83
h 21
i 36
j 87
dtype: int64
index 0
0 a 44
1 b 47
2 c 64
3 d 67
4 e 67
5 f 9
6 g 83
7 h 21
8 i 36
9 j 87
reset_index()는 이전 인덱스를 index 열에, Series 값을 0이라는 이름의 열에 넣은 DataFrame을 반환합니다. 값 열에 직접 레이블을 붙이려면 name을 지정합니다.
import pandas as pd
import numpy as np
np.random.seed(0)
df_series = pd.Series(
np.random.randint(0, 100, size=(10)),
index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
).rename_axis("index")
print(df_series)
print("\n")
print(df_series.reset_index(name="A"))
index
a 44
b 47
c 64
d 67
e 67
f 9
g 83
h 21
i 36
j 87
dtype: int64
index A
0 a 44
1 b 47
2 c 64
3 d 67
4 e 67
5 f 9
6 g 83
7 h 21
8 i 36
9 j 87
여러 Pandas Series를 DataFrame으로 변환하기
여러 Series를 하나의 DataFrame에 나란히 배치하려면 axis=1과 함께 pd.concat()에 전달합니다. Pandas는 인덱스 레이블을 기준으로 값을 정렬하므로, 일치하는 레이블은 같은 행에 들어갑니다. 아래 Series들은 동일한 인덱스를 가지며 세 개의 값 열을 생성합니다.
import pandas as pd
import numpy as np
np.random.seed(0)
df_series1 = pd.Series(
np.random.randint(0, 100, size=(10)),
index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)
df_series2 = pd.Series(
np.random.randint(40, 100, size=(10)),
index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)
df_series3 = pd.Series(
np.random.randint(80, 100, size=(10)),
index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)
df_stitched = pd.concat([df_series1, df_series2, df_series3], axis=1)
print(df_stitched)
0 1 2
a 44 46 97
b 47 64 85
c 64 64 93
d 67 52 88
e 67 98 89
f 9 41 99
g 83 78 96
h 21 79 99
i 36 63 85
j 87 86 95
pd.concat() 함수는 axis=1을 사용해 열 방향으로 연결합니다. 기본값은 axis=0으로, 대신 행 방향으로 연결합니다. 인덱스가 다르면 열 방향 연결은 레이블을 기준으로 정렬합니다. 어떤 Series에 없는 레이블은 해당 열에서 결측값이 됩니다.