728x90
반응형
질문 : Python Pandas의 기존 DataFrame에 새 열 추가
연속 번호가 아닌 명명 된 열과 행이있는 다음 인덱싱 된 DataFrame이 있습니다.
a b c d
2 0.671399 0.101208 -0.181532 0.241273
3 0.446172 -0.243316 0.051767 1.577318
5 0.614758 0.075793 -0.451460 -0.012493
'e'
를 추가하고 데이터 프레임에서 아무것도 변경하고 싶지 않습니다 (즉, 새 열의 길이는 항상 DataFrame과 동일 함).
0 -0.335485
1 -1.166658
2 -0.385571
dtype: float64
위의 예에 e
열을 어떻게 추가 할 수 있습니까?
답변
2017 편집
주석과 @Alexander에서 알 수 있듯이 현재 Series의 값을 DataFrame의 새 열로 추가하는 가장 좋은 방법은 assign
.
df1 = df1.assign(e=pd.Series(np.random.randn(sLength)).values)
2015 년 수정
일부는이 코드로 SettingWithCopyWarning
을 받고 있다고보고했습니다.
그러나 코드는 현재 pandas 버전 0.16.1에서 여전히 완벽하게 실행됩니다.
>>> sLength = len(df1['a'])
>>> df1
a b c d
6 -0.269221 -0.026476 0.997517 1.294385
8 0.917438 0.847941 0.034235 -0.448948
>>> df1['e'] = pd.Series(np.random.randn(sLength), index=df1.index)
>>> df1
a b c d e
6 -0.269221 -0.026476 0.997517 1.294385 1.757167
8 0.917438 0.847941 0.034235 -0.448948 2.228131
>>> pd.version.short_version
'0.16.1'
SettingWithCopyWarning
은 데이터 프레임의 복사본에 유효하지 않을 수있는 할당을 알리는 것을 목표로합니다. 반드시 잘못했다고 말하지는 않지만 (오탐을 유발할 수 있음) 0.13.0부터 동일한 목적에 더 적합한 방법이 있음을 알려줍니다. 그런 다음 경고가 표시되면 조언을 따르십시오. 대신 .loc [row_index, col_indexer] = value를 사용해보십시오.
>>> df1.loc[:,'f'] = pd.Series(np.random.randn(sLength), index=df1.index)
>>> df1
a b c d e f
6 -0.269221 -0.026476 0.997517 1.294385 1.757167 -0.050927
8 0.917438 0.847941 0.034235 -0.448948 2.228131 0.006109
>>>
실제로 이것은 현재 pandas 문서에 설명 된 보다 효율적인 방법입니다.
원래 답변 :
원래 df1 인덱스를 사용하여 시리즈를 만듭니다.
df1['e'] = pd.Series(np.random.randn(sLength), index=df1.index)
출처 : https://stackoverflow.com/questions/12555323/adding-new-column-to-existing-dataframe-in-python-pandas
728x90
반응형
'프로그래밍 언어 > Python' 카테고리의 다른 글
Python 프로그래밍할때 추천하는 IDE 편집기 (0) | 2021.12.14 |
---|---|
파이썬에서 __all__을 사용하는 이유 (0) | 2021.12.14 |
파이썬의 time.clock () vs time.time () 보다 정확한 것 (0) | 2021.12.14 |
Python의 try-except-else문 (0) | 2021.12.13 |
파이썬 try-else절의 용도 (0) | 2021.12.13 |