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


260

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

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

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


2
실제로 빈 문자열을 포함하는 열을 원하십니까 N/A?
Filmor

답변:


419

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

>>> 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

2
이 답변은 방금 새 행을 만들었습니다.
logicbloke

@logicbloke이 상황이 발생하는 예를 제공 할 수 있습니까?
craymichael 2016 년

@craymichael 그것은 오래되었지만 이름과 행이없는 숫자 색인 열이 있었고 끝에 새로운 행을 만들었습니다.
logicbloke 2016 년

1
df이 비어 있으면 사용하고 싶을 수도 있습니다 df['new'] = pd.Series() (아래 답변 참조)
Carsten

여러 개의 빈 열을 추가하는 방법?
M. Mariscal

46

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처럼 느껴지지 않습니다. :)


3
예를 version >= 0.20.0들어 DataFrame 을 삭제하고 새 열을 행으로 추가합니다. version < 0.20.0Pandas Version0.24.1
Lalo

@emunsing이 질문에 대한 답변을 검색하는 동안 귀하의 답변이 도움이되었습니다. 그러나 처음에는 Pandas가 , axis=1에서 요구 한대로 작동하지 않았습니다 version = 0.25. 업데이트 된 버전을 포함하도록 답변을 수정하려고했지만 @kenlukas 및 @il_raffa에 의해 거부되었습니다. 귀하의 답변이 왜 효과가 없는지 이해하기 위해 고군분투하는 모든 사람들이 적어도이 의견을 우연히 발견하기를 바랍니다.
Griff

@Griff-버전 호환성 문제에 대해보다 정확하고 명쾌하게 답변을 업데이트했습니다. 이것을 강조해 주셔서 감사합니다.
emunsing

35

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

df = df.reindex(columns = header_list)                

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

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

그래서 만약

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

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


2
보다 정확하게는 열에 NaN이 추가됩니다.
브로콜리

19

시작 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입니다.


C의 데이터 유형은 무엇입니까? 문자열 목록을 반복하여 추가하려고합니다. 그러나 그것을 사용하지 않습니다.
eleijonmarck

12

나는 좋아한다 :

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

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

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


5

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

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

4

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

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

1

아래 코드는 "기존 데이터 프레임에 n 개의 빈 열을 어떻게 추가합니까?"라는 질문을 해결합니다. 비슷한 문제에 대한 해결책을 한곳에 유지하기 위해 여기에 추가하고 있습니다.

접근법 1 (1-64의 컬럼 이름을 가진 64 개의 추가 컬럼을 작성하기 위해)

m = list(range(1,65,1)) 
dd=pd.DataFrame(columns=m)
df.join(dd).replace(np.nan,'') #df is the dataframe that already exists

접근 방식 2 (1-64의 열 이름을 가진 64 개의 추가 열을 만들려면)

df.reindex(df.columns.tolist() + list(range(1,65,1)), axis=1).replace(np.nan,'')

1

넌 할 수있어

df['column'] = None #This works. This will create a new column with None type
df.column = None #This will work only when the column is already present in the dataframe 

1

df.insert(index_to_insert_at, column_header, init_value)특정 인덱스에 새 열을 삽입 하는 데 사용할 수 있습니다 .

cost_tbl.insert(1, "col_name", "") 

위의 문장은 첫 번째 열 뒤에 빈 열을 삽입합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.