2016-11-18 8 views
0

은 내가 팬더 dataframe 열에서 모든 값을을 대체 에 노력하고 df.column_A그들이 10. 그러나여러 조건을 기반으로 pandas 데이터 프레임 열 시리즈의 특정 셀 값을 변경하는 방법은 무엇입니까?

, 1의 범위에 속하는 경우 어떻게 수행 할 때

df.loc[(1 < df.column_A < 10), "Column_A"] = 1,

나는 굴복하고있다 :

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

또는, 내가 할 때 나는 전혀 오류를 산출하지하고

df.loc[(df.column_A < 10) & (df.column_A > 1), "df.column_A"] = 1,

하지만 값이 대체되지 않습니다. 내가 기대하는 것처럼 df.column_A에서

df.loc[(df.column_A < 10) | (df.column_A > 1), "df.column_A"] = 1,

모든 값이, 1로 대체 얻을 :

이상한 내가 할 때이다.

이것은 행의 구문이 정확하다는 것을 의미하므로 실수는 필자가 이해하지 못하는 몇 가지 요인으로 인한 것입니다.

내가 뭘 잘못하고 있니?

답변

1

간단한 문제입니다. .loc은 인덱스 레이블 또는 부울 목록/Series를 사용합니다. 그래서이 작동합니다 : 나는 열 인덱스 장소에서 df.을 제거

df.loc[(df.column_A < 10) & (df.column_A > 1), "column_A"] = 1 

참고. 동작 (1 < df.column_A < 10) 논리적 보이지만 하나 개의 값으로 전체 시리즈를 축소하려고하기 때문에


df.loc[(1 < df.column_A < 10), "Column_A"] = 1 

이 작동하지 않습니다. and, or 또는 기타 조합을 원하는지 여부를 알 수 없으므로 오류가 발생합니다.

df.loc[(df.column_A < 10) | (df.column_A > 1), "df.column_A"] = 1 

열을 올바르게 참조하지 않기 때문에 작동하지 않아야합니다. 오류가없는 것은 재미 있습니다. 아마 당신은 당신을 구할 수있는 일찍 프로그램에서 뭔가를했습니다 ...