구문도 작동 할 것으로 예상했을 것입니다. 열 목록 구문 ( df[[new1, new2]] = ...
) 을 사용하여 새 열을 만들 때 pandas에서 오른쪽이 DataFrame이되어야 하기 때문에 문제가 발생합니다 ( DataFrame의 열이 열과 이름이 같은지 여부는 실제로 중요하지 않습니다. 당신이 만들고 있습니다).
귀하의 구문은 기존 열에 스칼라 값을 할당하는 데 잘 작동 하며 pandas는 단일 열 구문 ( df[new1] = ...
)을 사용하여 새 열에 스칼라 값을 할당하는 것을 기쁘게 생각합니다 . 따라서 해결책은 이것을 여러 개의 단일 열 할당으로 변환하거나 오른쪽에 적합한 DataFrame을 만드는 것입니다.
여기에 몇 가지 방법입니다 것입니다 작업은 :
import pandas as pd
import numpy as np
df = pd.DataFrame({
'col_1': [0, 1, 2, 3],
'col_2': [4, 5, 6, 7]
})
그런 다음 다음 중 하나 :
1) 목록 압축 해제를 사용하여 하나의 세 가지 할당 :
df['column_new_1'], df['column_new_2'], df['column_new_3'] = [np.nan, 'dogs', 3]
2) DataFrame
인덱스와 일치하도록 단일 행을 편리하게 확장하므로 다음을 수행 할 수 있습니다.
df[['column_new_1', 'column_new_2', 'column_new_3']] = pd.DataFrame([[np.nan, 'dogs', 3]], index=df.index)
3) 새 열로 임시 데이터 프레임을 만든 다음 나중에 원래 데이터 프레임과 결합합니다.
df = pd.concat(
[
df,
pd.DataFrame(
[[np.nan, 'dogs', 3]],
index=df.index,
columns=['column_new_1', 'column_new_2', 'column_new_3']
)
], axis=1
)
4) 이전과 유사하지만 join
대신 사용 concat
(효율성이 떨어질 수 있음) :
df = df.join(pd.DataFrame(
[[np.nan, 'dogs', 3]],
index=df.index,
columns=['column_new_1', 'column_new_2', 'column_new_3']
))
5) dict를 사용하는 것은 이전 두 데이터 프레임보다 새 데이터 프레임을 만드는 더 "자연스러운"방법이지만 새 열은 알파벳순으로 정렬됩니다 (적어도 Python 3.6 또는 3.7 이전 ).
df = df.join(pd.DataFrame(
{
'column_new_1': np.nan,
'column_new_2': 'dogs',
'column_new_3': 3
}, index=df.index
))
6) .assign()
여러 열 인수와 함께 사용하십시오 .
@zero의 대답에 대한이 변형을 많이 좋아하지만 이전 열과 마찬가지로 새 열은 적어도 초기 버전의 Python에서는 항상 알파벳순으로 정렬됩니다.
df = df.assign(column_new_1=np.nan, column_new_2='dogs', column_new_3=3)
new_cols = ['column_new_1', 'column_new_2', 'column_new_3']
new_vals = [np.nan, 'dogs', 3]
df = df.reindex(columns=df.columns.tolist() + new_cols) # add empty cols
df[new_cols] = new_vals # multi-column assignment works for existing cols
8) 결국 세 가지 개별 과제를이기는 것은 어렵습니다.
df['column_new_1'] = np.nan
df['column_new_2'] = 'dogs'
df['column_new_3'] = 3
참고 : 이러한 옵션의 대부분은 이미 다른 답변에서 설명되었습니다 DataFrame에 여러 열을 추가하고 기존 열을 동일하게 설정 , 그것은 팬더 DataFrame로 한 번에 여러 열을 추가 할 수 있습니까? , pandas DataFrame에 여러 개의 빈 열 추가
KeyError: "None of [Index(['column_new_1', 'column_new_2', 'column_new_3'], dtype='object')] are in the [columns]"