HOWTO · Pandas
목록에서 Pandas 데이터 프레임 만들기
이 가이드에서는 목록을 사용하여 pandas 데이터 프레임을 만드는 방법을 보여줍니다.
이 페이지의 내용
Pandas의 pd.DataFrame() 생성자를 사용하면 목록 형태의 데이터를 표로 바꿀 수 있습니다. 데이터에 맞는 입력 형태를 선택하세요. 1차원 목록은 열 하나를 만들고, 목록의 목록은 행을 만들며, 딕셔너리는 이름이 지정된 열이나 레코드를 제공합니다. 아래 예제에서는 열 이름을 지정하는 방법과 각 입력 형태가 결과 DataFrame에 어떻게 대응하는지 보여 줍니다.
단일 목록으로 DataFrame 만들기
1차원 목록을 pd.DataFrame()에 전달하고 열 이름을 하나 지정합니다. 목록의 각 값은 해당 열의 한 행이 됩니다.
import pandas as pd
values = [10, 20, 30]
df = pd.DataFrame(values, columns=["Score"])
print(df)
입력 열이 하나뿐이어도 columns 인수에는 레이블 목록을 전달합니다. 다른 인덱스를 지정하지 않으면 DataFrame이 기본 행 인덱스를 사용합니다. 이 입력으로 만든 결과에는 Score 열 하나가 있고, 각 값이 한 행을 차지합니다.
여러 목록으로 DataFrame 만들기
각 열에 해당하는 값이 별도의 목록에 들어 있다면 Python의 zip() 함수를 사용해 위치별로 항목을 짝지은 다음, 만들어진 행을 생성자에 전달합니다.
import pandas as pd
names = ["Ada", "Lin"]
scores = [95, 88]
rows = list(zip(names, scores))
df = pd.DataFrame(rows, columns=["Name", "Score"])
print(df)
두 목록의 첫 번째 값이 첫 행을 만들고, 두 번째 값이 다음 행을 만드는 식으로 이어집니다. zip()은 가장 짧은 입력에 도달하면 멈추므로, 더 긴 목록의 끝에 남은 값은 포함되지 않습니다. 모든 값을 결과에 포함해야 한다면 목록 길이를 맞추세요.
목록의 목록으로 DataFrame 만들기
행 단위로 정리된 데이터라면 내부 목록 하나를 한 행으로 구성하고, 이에 맞는 열 이름을 pd.DataFrame()에 전달합니다.
import pandas as pd
rows = [[1, "Ada", 95], [2, "Lin", 88]]
df = pd.DataFrame(rows, columns=["ID", "Name", "Score"])
print(df)
여기서는 각 내부 목록의 첫 번째 항목이 ID, 두 번째 항목이 Name, 세 번째 항목이 Score에 대응합니다. 각 행에는 지정한 열 이름마다 값이 하나씩 있어야 하므로, 중첩 목록을 준비할 때 이 관계를 일관되게 유지하세요. 각 값에 필드 이름이 아직 붙어 있지 않지만 데이터가 이미 레코드 단위로 정리되어 있을 때 유용한 형식입니다.
딕셔너리 목록으로 DataFrame 만들기
각 레코드에서 값과 필드 이름을 이미 연결해 두었다면 딕셔너리 목록을 사용합니다. Pandas는 딕셔너리의 키를 열 이름으로 사용하고 각 딕셔너리를 한 행으로 만듭니다.
import pandas as pd
records = [
{"Name": "Ada", "Score": 95},
{"Name": "Lin", "Score": 88},
]
df = pd.DataFrame(records)
print(df)
이 형식에서는 값의 위치가 아니라 키로 값을 식별하므로 레코드 형태의 데이터에 편리합니다. 어떤 딕셔너리에 다른 레코드에 있는 키가 빠져 있으면 Pandas는 해당 열을 만들고 그 행의 누락된 값에 결측값 표시를 채웁니다. 열 순서를 제어하거나 정해진 필드 집합을 포함하려면 생성자에 columns=[...]를 추가하세요.
목록 딕셔너리로 DataFrame 만들기
열 단위로 정리된 데이터라면 각 열 이름을 값 목록에 연결합니다. 딕셔너리 키는 열 이름이 되고, 각 목록은 해당 열의 값을 제공합니다.
import pandas as pd
columns = {
"Name": ["Ada", "Lin"],
"Score": [95, 88],
}
df = pd.DataFrame(columns)
print(df)
Pandas가 목록을 행으로 구성하려면 딕셔너리에 있는 모든 값 목록의 길이가 같아야 합니다. 예를 들어 이름 목록 하나와 점수 목록 하나처럼 필드별로 값을 모아 둔 경우에 유용한 구조입니다. 데이터가 현재 행 단위로 정리되어 있다면 위의 목록의 목록 형식을 사용하세요.
NumPy 배열로 DataFrame 만들기
2차원 NumPy 배열은 중첩 목록과 마찬가지로 pd.DataFrame()에 전달할 수 있습니다. 배열의 열에 의미 있는 이름이 필요하면 열 레이블을 지정하세요.
import numpy as np
import pandas as pd
values = np.array([[1, 95], [2, 88]])
df = pd.DataFrame(values, columns=["ID", "Score"])
print(df)
NumPy 배열에는 원소에 적용되는 dtype이 있습니다. 예를 들어 숫자와 문자열을 섞어 하나의 배열을 만들면 DataFrame을 구성하기 전에 숫자 값이 문자열로 변환될 수 있습니다. 열마다 다른 자료형이 필요하면 각 열을 별도의 딕셔너리 값으로 만들거나 딕셔너리 목록을 사용하세요. 이 예제는 숫자 배열을 사용하며 성능을 비교하거나 주장하지 않습니다. 보유한 데이터를 가장 잘 표현하는 입력 형태를 선택하세요.