티스토리 뷰
Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.
Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.
아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.
Set value for particular cell in pandas DataFrame using index
인덱스를 사용하여 판다스 데이터프레임에서 특정 셀에 대한 값 설정
문제 내용
I have created a Pandas DataFrame
판다스 데이터프레임을 만들었습니다.
df = DataFrame(index=['A','B','C'], columns=['x','y'])
and have got this
그리고 이것을 가지고 있습니다.
x y A NaN NaN B NaN NaN C NaN NaN
Now, I would like to assign a value to particular cell, for example to row C
and column x
. I would expect to get this result:
이제 특정 셀에 값을 할당하려고 합니다. 예를 들어 행 C와 열 x에 값을 할당합니다. 저는 다음과 같은 결과를 얻을 것으로 예상합니다.
x y A NaN NaN B NaN NaN C 10 NaN
with this code:
다음 코드를 사용했습니다.
df.xs('C')['x'] = 10
However, the contents of df
has not changed. The dataframe contains yet again only NaN
s.
하지만 df의 내용은 바뀌지 않았습니다. 데이터프레임은 다시 NaN만 포함한다.
Any suggestions?
좋은 의견있나요?
높은 점수를 받은 Solution
RukTech's answer, df.set_value('C', 'x', 10)
, is far and away faster than the options I've suggested below. However, it has been slated for deprecation.
RukTech의 답변인 df.set_value('C', 'x', 10)는 제가 아래에 제시한 옵션보다 훨씬 빠릅니다. 하지만, 그것은 곧 지원이 중단 될 예정입니다.
Going forward, the recommended method is .iat/.at
.
앞으로 권장되는 방법은 .iat/.at입니다.
Why df.xs('C')['x']=10
does not work:
df.xs('C')['x']=10이 작동하지 않는 이유:
df.xs('C')
by default, returns a new dataframe with a copy of the data, so
기본적으로 df.xs('C')는 데이터 복사본과 함께 새 데이터프레임을 반환합니다.
df.xs('C')['x']=10
modifies this new dataframe only.
이 새 데이터프레임만 수정합니다.
df['x']
returns a view of the df
dataframe, so
df['x']는 df 데이터 프레임의 뷰를 반환하므로
df['x']['C'] = 10
modifies df
itself.
df 자체를 수정합니다.
Warning: It is sometimes difficult to predict if an operation returns a copy or a view. For this reason the docs recommend avoiding assignments with "chained indexing".
경고: 작업이 복사본 또는 뷰를 반환하는지 예측하기 어려운 경우가 있습니다. 이러한 이유로 문서는 "체인 인덱싱"으로 할당을 피하는 것이 좋습니다.
So the recommended alternative is
그래서 추천하는 대안은
df.at['C', 'x'] = 10
which does modify df
.
그것은 df를 수정합니다.
In [18]: %timeit df.set_value('C', 'x', 10)
100000 loops, best of 3: 2.9 µs per loop
In [20]: %timeit df['x']['C'] = 10
100000 loops, best of 3: 6.31 µs per loop
In [81]: %timeit df.at['C', 'x'] = 10
100000 loops, best of 3: 9.2 µs per loop
가장 최근 달린 Solution
Avoid Assignment with Chained Indexing
연결된 인덱싱을 사용하여 할당 방지
You are dealing with an assignment with chained indexing which will result in a SettingWithCopy
warning. This should be avoided by all means.
SettingWithCopy 경고가 발생하는 체인 인덱싱을 사용하여 할당을 처리하고 있습니다. 이것은 반드시 피해야 합니다.
Your assignment will have to resort to one single .loc[]
or .iloc[]
slice, as explained here. Hence, in your case:
여기에 설명된 바와 같이 할당은 단일 .loc[] 또는 .iloc[] 슬라이스에 의존해야 합니다. 따라서, 당신의 경우:
df.loc['C', 'x'] = 10
출처 : https://stackoverflow.com/questions/13842088/set-value-for-particular-cell-in-pandas-dataframe-using-index
'개발 > 파이썬' 카테고리의 다른 글
여러 CSV 파일을 판다스로 가져와 하나의 데이터프레임으로 만들기 (0) | 2022.12.23 |
---|---|
리스트를 문자열로 변환하기 (0) | 2022.12.23 |
init 안에서 await를 이용해 class attribute를 정의하기 (0) | 2022.12.22 |
Python에서 지정된 디렉토리의 모든 파일의 경로 가져오기 (0) | 2022.12.21 |
Python에서 딕셔너리에 새 항목 추가하기 (0) | 2022.12.21 |