[python] 데이터 프레임에 빈 열을 추가하는 방법은 무엇입니까?

팬더 DataFrame객체에 빈 열을 추가하는 가장 쉬운 방법은 무엇입니까 ? 내가 우연히 만난 것은

df['foo'] = df.apply(lambda _: '', axis=1)

덜 왜곡 된 방법이 있습니까?



답변

올바르게 이해하면 과제는 다음과 같이 채워 져야합니다.

>>> import numpy as np
>>> import pandas as pd
>>> df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
>>> df
   A  B
0  1  2
1  2  3
2  3  4
>>> df["C"] = ""
>>> df["D"] = np.nan
>>> df
   A  B C   D
0  1  2   NaN
1  2  3   NaN
2  3  4   NaN


답변

DSM의 답변에 추가하고 이와 관련된 질문을 바탕으로 접근 방식을 두 가지 경우로 나누었습니다.

  • 단일 열 추가 : 빈 값을 새 열에 지정하십시오. 예 : df['C'] = np.nan

  • 여러 열 추가 : .reindex(columns=[...]) 팬더 방법을 사용 하여 데이터 프레임의 열 인덱스에 새 열을 추가하는 것이 좋습니다 . 또한로 여러 개의 새 행을 추가 할 때도 작동합니다 .reindex(rows=[...]). 최신 버전의 Pandas (v> 0.20)를 사용하면 or에 axis명시 적으로 할당하지 않고 키워드 를 지정할 수 있습니다 .columnsrows

다음은 여러 열을 추가하는 예입니다.

mydf = mydf.reindex(columns = mydf.columns.tolist() + ['newcol1','newcol2'])

또는

mydf = mydf.reindex(mydf.columns.tolist() + ['newcol1','newcol2'], axis=1)  # version > 0.20.0

항상 새로운 (빈) 데이터 프레임을 기존 데이터 프레임에 연결할 수는 있지만 그것은 나에게 pythonic처럼 느껴지지 않습니다. 🙂


답변

더 간단한 해결책은 다음과 같습니다.

df = df.reindex(columns = header_list)                

여기서 “header_list”는 표시하려는 헤더 목록입니다.

데이터 프레임에 아직없는 목록에 포함 된 헤더는 아래 빈 셀과 함께 추가됩니다.

그래서 만약

header_list = ['a','b','c', 'd']

그런 다음 c와 d는 빈 셀이있는 열로 추가됩니다


답변

시작 v0.16.0, DF.assign()새로운 열 (할당 할 수있는 단일 / 다중 A와를) DF. 이 열은의 끝에 알파벳 순서로 삽입됩니다 DF.

이는 반환 된 데이터 프레임에서 직접 일련의 체인 작업을 수행하려는 경우 간단한 할당과 비교하여 유리합니다.

DF@DSM이 보여주는 동일한 샘플을 고려하십시오 .

df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
df
Out[18]:
   A  B
0  1  2
1  2  3
2  3  4

df.assign(C="",D=np.nan)
Out[21]:
   A  B C   D
0  1  2   NaN
1  2  3   NaN
2  3  4   NaN

이렇게하면 새로 생성 된 열과 함께 이전의 모든 열이 포함 된 복사본이 반환됩니다. 이에 따라 원본 DF을 수정하려면 다음과 같이 사용하십시오 . 현재 작동을 df = df.assign(...)지원하지 않기 때문 inplace입니다.


답변

나는 좋아한다 :

df['new'] = pd.Series(dtype='your_required_dtype')

빈 데이터 프레임이있는 경우이 솔루션은 포함하는 새 행 NaN이 추가 되지 않도록합니다 .

경우 dtype지정되지 않은, 새로운 팬더 버전은 생산 DeprecationWarning.


답변

목록에서 열 이름을 추가하려는 경우

df=pd.DataFrame()
a=['col1','col2','col3','col4']
for i in a:
    df[i]=np.nan


답변

@ emunsing의 대답 은 여러 열을 추가하는 것이 정말 좋지만 파이썬 2.7에서 작동하지 못했습니다. 대신, 나는 이것이 효과가 있음을 발견했다.

mydf = mydf.reindex(columns = np.append( mydf.columns.values, ['newcol1','newcol2'])