HOWTO · Pandas

Pandas DataFrame에서 빈 열을 만드는 방법

간단한 할당 연산자, reindex(), assign() 및 insert() 메서드를 사용하여 Pandas의 DataFrame에 빈 열을 추가 할 수 있습니다.

이 페이지의 내용

Python에서 기존 pandas DataFrame에 빈 열을 추가하려면, 빈 문자열에는 df["NewColumn"] = ""을 사용하고 결측값에는 df["NewColumn"] = float("nan")을 사용합니다(NaN). 두 방법 모두 기존 행과 다른 열을 유지합니다. 빈 문자열은 텍스트 값이므로 이후 계산이나 필터링에 필요한 값의 형태를 선택하세요.

여러 열을 추가하려면 reindex()를, 이름을 지정해 열을 추가한 DataFrame을 반환받으려면 assign()을, 열의 위치를 지정하려면 insert()를 사용하세요. 예제를 실행하려면 pandas와 NumPy가 필요합니다.

간단한 할당으로 빈 열 만들기

새 열에 스칼라 값을 할당하면 그 값이 기존의 모든 행에 반복됩니다. 할당은 df를 직접 변경하고 새 열을 오른쪽 끝에 추가합니다. 열 이름이 이미 있으면 해당 열의 내용이 바뀌므로 기존 데이터를 보존하려면 새 이름을 사용하세요.

다음 예제에서는 빈 문자열, NumPy의 결측값 표시자, 그리고 비어 있는 pandas Series를 비교합니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

import pandas as pd
import numpy as np

dates = ["April-20", "April-21", "April-22", "April-23", "April-24", "April-25"]
income = [10, 20, 10, 15, 10, 12]
expenses = [3, 8, 4, 5, 6, 10]


df = pd.DataFrame({"Date": dates, "Income": income, "Expenses": expenses})

df["Empty_1"] = ""
df["Empty_2"] = np.nan
df["Empty_3"] = pd.Series()

print(df)

출력:

       Date  Income  Expenses Empty_1  Empty_2 Empty_3
0  April-20      10         3              NaN     NaN
1  April-21      20         8              NaN     NaN
2  April-22      10         4              NaN     NaN
3  April-23      15         5              NaN     NaN
4  April-24      10         6              NaN     NaN
5  April-25      12        10              NaN     NaN

Empty_1에는 빈 문자열이 들어 있고, Empty_2에는 NaN이 들어 있습니다. Series를 할당할 때 pandas는 인덱스 레이블을 DataFrame의 행 레이블에 맞춥니다. 빈 Series에는 일치하는 레이블이 없으므로 Empty_3의 모든 값도 결측값이 됩니다.

자료형을 명시하는 대안으로 df["NewColumn"] = pd.Series(index=df.index, dtype="float64")를 사용할 수 있습니다. df.index를 포함하면 행 정렬 방식이 명확해집니다. 나중에 결측값을 선택할 때는 NaN과 같은지 비교하지 말고 df["NewColumn"].isna()를 사용하세요. 빈 문자열은 ""과 별도로 비교해야 합니다.

pandas.DataFrame.reindex()로 빈 열 추가하기

pandas.DataFrame.reindex() 메서드는 요청한 열 레이블과 순서에 맞는 DataFrame을 반환합니다. 새로 추가된 레이블에는 기본적으로 결측값이 들어갑니다. 주의할 점은 columns가 추가할 열만 지정하는 것이 아니라 결과에 포함할 전체 열 목록을 지정한다는 것입니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

import pandas as pd
import numpy as np

dates = ["April-20", "April-21", "April-22", "April-23", "April-24", "April-25"]
income = [10, 20, 10, 15, 10, 12]
expenses = [3, 8, 4, 5, 6, 10]


df = pd.DataFrame({"Date": dates, "Income": income, "Expenses": expenses})


column_names = ["Empty_1", "Empty_2", "Empty_3"]

df = df.reindex(columns=column_names)
print(df)

출력:

   Empty_1  Empty_2  Empty_3
0      NaN      NaN      NaN
1      NaN      NaN      NaN
2      NaN      NaN      NaN
3      NaN      NaN      NaN
4      NaN      NaN      NaN
5      NaN      NaN      NaN

이 예제의 결과에는 6개의 행 레이블이 남지만 Date, Income, Expenses 열은 제거됩니다. 그 결과를 df에 다시 할당하면 원래 참조가 새 결과로 바뀝니다.

기존 데이터를 유지하려면 df.columns.tolist()로 시작해 새 이름을 덧붙이세요. 이렇게 하면 기존 열의 순서를 보존하면서 새 열을 오른쪽에 배치할 수 있습니다. 이 메서드는 원본 객체를 제자리에서 수정하지 않으므로 반환된 DataFrame을 저장해야 합니다. 다음 예제를 실행해 보세요.

import pandas as pd
import numpy as np

dates = ["April-20", "April-21", "April-22", "April-23", "April-24", "April-25"]
income = [10, 20, 10, 15, 10, 12]
expenses = [3, 8, 4, 5, 6, 10]


df = pd.DataFrame({"Date": dates, "Income": income, "Expenses": expenses})

df = df.reindex(columns=df.columns.tolist() + ["Empty_1", "Empty_2", "Empty_3"])
print(df)

출력:

       Date  Income  Expenses  Empty_1  Empty_2  Empty_3
0  April-20      10         3      NaN      NaN      NaN
1  April-21      20         8      NaN      NaN      NaN
2  April-22      10         4      NaN      NaN      NaN
3  April-23      15         5      NaN      NaN      NaN
4  April-24      10         6      NaN      NaN      NaN
5  April-25      12        10      NaN      NaN      NaN

원래 날짜, 수입, 지출 열은 그대로 남고, 그 뒤에 NaN이 들어 있는 열 세 개가 추가됩니다. 중복 레이블을 요청하지 않도록 기존에 없는 새 열 이름을 선택하세요.

pandas.DataFrame.assign()으로 DataFrame에 빈 열 추가하기

pandas.DataFrame.assign() 메서드는 이름을 지정한 열을 하나 이상 포함하는 DataFrame을 반환합니다. 각 키워드가 열 이름을 지정하고 그 열에 들어갈 값을 제공합니다. 예시처럼 df = df.assign(...)으로 반환된 객체를 유지하거나, 다른 이름으로 저장해 원래 DataFrame을 보존하세요.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

import pandas as pd
import numpy as np

dates = ["April-20", "April-21", "April-22", "April-23", "April-24", "April-25"]
income = [10, 20, 10, 15, 10, 12]
expenses = [3, 8, 4, 5, 6, 10]


df = pd.DataFrame({"Date": dates, "Income": income, "Expenses": expenses})

df = df.assign(Empty_1="", Empty_2=np.nan)
print(df)

출력:

       Date  Income  Expenses Empty_1  Empty_2
0  April-20      10         3              NaN
1  April-21      20         8              NaN
2  April-22      10         4              NaN
3  April-23      15         5              NaN
4  April-24      10         6              NaN
5  April-25      12        10              NaN

Empty_1에는 빈 문자열이 들어 있고, NaN이 들어 있는 열은 Empty_2뿐입니다. 기존 열은 유지됩니다. 직접 할당과 마찬가지로 기존 열 이름을 지정하면 반환된 DataFrame에서 해당 열의 내용이 바뀝니다.

pandas.DataFrame.insert()로 DataFrame에 빈 열 추가하기

열의 위치가 중요하다면 pandas.DataFrame.insert()를 사용하세요. 호출 형식은 df.insert(loc, column, value)입니다. loc는 0부터 세는 열 위치이고, column은 새 레이블이며, value는 필수 인수입니다. 빈 텍스트에는 ""을, 결측값에는 np.nan을 지정하세요.

위치는 0부터 len(df.columns)까지이며 양 끝값을 모두 포함합니다. 상한값을 사용하면 열이 맨 오른쪽에 추가됩니다. 기본 설정에서는 이미 존재하는 레이블을 삽입하면 오류가 발생합니다. allow_duplicates=True를 전달하면 중복 레이블을 허용하지만, 이후 열을 선택할 때 모호해질 수 있습니다.

assign() 및 reindex()와 달리 insert()는 df를 제자리에서 변경하고 None을 반환합니다. df = df.insert(...)처럼 작성하지 마세요.

다음 예제는 열 두 개를 오른쪽 끝에 추가합니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

import pandas as pd
import numpy as np

dates = ["April-20", "April-21", "April-22", "April-23", "April-24", "April-25"]
income = [10, 20, 10, 15, 10, 12]
expenses = [3, 8, 4, 5, 6, 10]


df = pd.DataFrame({"Date": dates, "Income": income, "Expenses": expenses})
df.insert(3, "Empty_1", "")
df.insert(4, "Empty_2", np.nan)
print(df)

출력:

       Date  Income  Expenses Empty_1  Empty_2
0  April-20      10         3              NaN
1  April-21      20         8              NaN
2  April-22      10         4              NaN
3  April-23      15         5              NaN
4  April-24      10         6              NaN
5  April-25      12        10              NaN

Empty_1은 열 위치 3에 있고 빈 문자열을 포함합니다. 이 열을 삽입한 뒤에는 Empty_2에 사용할 위치 4가 생기며, 해당 열에는 NaN이 들어갑니다. 열을 맨 앞에 놓으려면 loc=0을 사용하세요. 기존 열은 값이 바뀌지 않은 채 오른쪽으로 이동합니다.