팬더 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
명시 적으로 할당하지 않고 키워드 를 지정할 수 있습니다 .columns
rows
다음은 여러 열을 추가하는 예입니다.
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'])