현장에서의 이해=판다에게는 사실입니다.
pandas
라이브러리에는 다음 문장과 같이 객체를 변경할 수 있는 옵션이 여러 번 있습니다.
df.dropna(axis='index', how='all', inplace=True)
어떤 것이 반환되고 있는지, 그리고 물건이 어떻게 처리되는지 궁금합니다.inplace=True
다음과 같은 경우에 통과됩니다.inplace=False
.
이 수정 요?self
때에inplace=True
그리고 언제inplace=False
는 다과같 생새개체다니입성된즉과 입니다.new_df = self
그리고 나서.new_df
반환됩니까?
가 다른용경사용하야질는닫문우으는려을해가사자▁를 사용해야 ,inplace=True
대신 Pandas DataFrame에서 replace() 메서드가 작동하지 않는 것을 고려해 보십시오.
때inplace=True
데이터가 전달되면 데이터 이름이 제자리에 변경됩니다(아무것도 반환하지 않음). 따라서 다음을 사용할 수 있습니다.
df.an_operation(inplace=True)
때inplace=False
전달됨(기본값이므로 필요하지 않음), 작업을 수행하고 개체의 복사본을 반환하므로 다음을 사용할 수 있습니다.
df = df.an_operation(inplace=False)
판다에서, 제자리에서 = 참이 해롭다고 생각합니까, 아니면 아닌가요?
TLDR; 네, 그렇습니다.
inplace
암시하는 것을 (을 전혀 제공하지 .inplace
는 메소드 (method chaining)과 .inplace
으로 이어질 수 있습니다SettingWithCopyWarning
열에 수 코드DataFrame에서 어려운 할 수 .
위의 문제점은 초보자에게 일반적인 함정이므로 이 옵션을 제거하면 API가 단순해집니다.
이 매개 변수는 거의 사용되지 않으므로 설정하지 않는 것이 좋습니다.다음을 제안하는 GitHub 이슈를 참조하십시오.inplace
api 인수는 사용되지 .
를 사용하는 것은 일반적인 오해입니다.inplace=True
보다 효율적이거나 최적화된 코드로 이어집니다.실제로 사용할 경우 성능상의 이점은 전혀 없습니다.inplace=True
인플레이스 버전과 아웃플레이스 버전은 모두 데이터의 복사본을 생성하며, 인플레이스 버전은 자동으로 복사본을 다시 할당합니다.
inplace=True
초보자들에게 흔한 함정입니다.예를 들어, 다음을 트리거할 수 있습니다.
df = pd.DataFrame({'a': [3, 2, 1], 'b': ['x', 'y', 'z']})
df2 = df[df['a'] > 1]
df2['b'].replace({'x': 'abc'}, inplace=True)
# SettingWithCopyWarning:
# A value is trying to be set on a copy of a slice from a DataFrame
을 사용하여 inplace=True
될 수도 있고 안 될 수도 있습니다.이는 특히 체인 인덱싱이 관련된 경우에 해당됩니다.
하지 않은 처럼, 위서설문명충이않것처럼은지분하들,inplace=True
또한 메서드 체인을 방해합니다.의 작업을 비교합니다.
result = df.some_function1().reset_index().some_function2()
와는 반대로
temp = df.some_function1()
temp.reset_index(inplace=True)
result = temp.some_function2()
전자는 더 나은 코드 구성과 가독성에 적합합니다.
다른 가 되는 은 또다근가주되장은 API입다니대한 .set_axis
최근에 변경되어 다음과 같이 변경되었습니다.inplace
기본값이 True에서 False로 전환되었습니다.GH27600을 참조하십시오.잘했어, 개발자들!
제가 사용하는 방법은
# Have to assign back to dataframe (because it is a new copy)
df = df.some_operation(inplace=False)
또는
# No need to assign back to dataframe (because it is on the same copy)
df.some_operation(inplace=True)
결론:
if inplace is False
Assign to a new variable;
else
No need to assign
그inplace
매개변수:
df.dropna(axis='index', how='all', inplace=True)
Pandas
일반적인 의미:
판다가 원본 데이터의 복사본을 만듭니다.
...그것에 대해 약간의 계산을 합니다.
...결과를 원본 데이터에 할당합니다.
... 복사본을 삭제합니다.
아래 제 답변의 나머지 부분에서 읽을 수 있듯이, 우리는 여전히 이 매개 변수를 사용할 충분한 이유가 있습니다. 즉,inplace operations
더문제가 에, 우리는 을 피할 수 있다면 . 예를 들어 러나다음같과더가피그합능다니해면야하로발므생하가제문은많이:▁but그▁as,다합▁if니▁issues▁it▁we▁we▁more▁it▁generate▁avoid피해▁should가야능하면▁as,.
코드를 디버깅하기가 더 어려워집니다(실제 복사 경고로 설정은 이 가능한 문제에 대한 경고를 의미합니다).
메서드 체인과 충돌
그럼 아직 언제 사용해야 하는 경우도 있는 건가요?
확실히 그렇습니다.만약 우리가 거대한 데이터 세트를 처리하기 위해 팬더나 어떤 도구를 사용한다면, 우리는 일부 빅 데이터가 우리의 전체 메모리를 소비할 수 있는 상황에 쉽게 직면할 수 있습니다.이러한 원치 않는 영향을 방지하기 위해 메소드 체인과 같은 몇 가지 기술을 사용할 수 있습니다.
(
wine.rename(columns={"color_intensity": "ci"})
.assign(color_filter=lambda x: np.where((x.hue > 1) & (x.ci > 7), 1, 0))
.query("alcohol > 14 and color_filter == 1")
.sort_values("alcohol", ascending=False)
.reset_index(drop=True)
.loc[:, ["alcohol", "ci", "hue"]]
)
이는 코드를 더 압축하고(해석 및 디버그가 더 어렵지만) 체인 방식이 다른 메서드의 반환된 값과 함께 작동하므로 메모리를 덜 소비하므로 입력 데이터의 복사본이 하나만 생성됩니다.이 작업 후 원래 데이터 메모리 사용량이 2배 증가한다는 것을 명확하게 알 수 있습니다.
아니면 우리는 사용할 수 있습니다.inplace
매개 변수(해석 및 디버그가 더 어렵지만)는 원본 데이터의 2배이지만, 이 작업 이후의 메모리 소비는 원본 데이터의 1배로 유지됩니다. 이는 거대한 데이터 세트를 사용할 때마다 누군가가 정확하게 알고 있다면 큰 이점이 될 수 있습니다.
최종 결론:
사용을 피합니다.inplace
사용자가 대용량 데이터를 사용하지 않고 계속 사용하는 경우 발생할 수 있는 문제를 인식하지 않는 한 매개 변수를 사용할 수 있습니다.
동일한 변수에 저장
data["column01"].where(data["column01"]< 5, inplace=True)
별도의 변수에 저장
data["column02"] = data["column01"].where(data["column1"]< 5)
그러나 언제든지 변수를 덮어쓸 수 있습니다.
data["column01"] = data["column01"].where(data["column1"]< 5)
: 기값본inplace = False
함수를 사용하여 Pandas 데이터 프레임을 변경할 때는 'inplace='를 사용합니다.true'는 데이터 프레임의 변경 사항을 커밋하려는 경우에 사용됩니다.따라서 다음 코드의 첫 번째 줄은 'df'의 첫 번째 열 이름을 'Grades'로 변경합니다.결과 데이터베이스를 보려면 데이터베이스를 호출해야 합니다.
df.rename(columns={0: 'Grades'}, inplace=True)
df
변경 내용을 커밋하지 않고 결과 데이터베이스만 인쇄하려는 경우 'inplace=False'(기본값이기도 함)를 사용합니다.따라서 변경 내용이 커밋된 원본 데이터베이스의 복사본은 원본 데이터베이스를 변경하지 않고 인쇄됩니다.
좀 더 명확히 하기 위해 다음 코드에서도 동일한 작업을 수행합니다.
#Code 1
df.rename(columns={0: 'Grades'}, inplace=True)
#Code 2
df=df.rename(columns={0: 'Grades'}, inplace=False}
네, 판다에는 여러 가지 기능이 있습니다. 매개 변수가 있습니다.inplace
으로 그나기으할니다당됩로적본에 됩니다.False
.
그래서, 당신이 할 때.df.dropna(axis='index', how='all', inplace=False)
의 것을 바꾸고 싶지 않다고 생각합니다.DataFrame
따라서 필요한 변경사항이 있는 새 사본을 대신 작성합니다.
하지만, 당신이 그것을 바꿀 때.inplace
변수 to 한대 변수 개매 에▁to.True
그렇다면 새 사본을 원하지 않는다고 명시적으로 말하는 것과 같습니다.
DataFrame
대신 주어진 변경을 수행합니다.DataFrame
이로 인해 Python 인터프리터는 새 파일을 생성하지 않습니다.DataFrame
하지만 당신은 또한 사용을 피할 수 있습니다.inplace
하여 파라미터를 합니다.
df = df.dropna(axis='index', how='all')
inplace=True
원본 df를 변경할지 여부에 따라 사용됩니다.
df.drop_duplicates()
삭제된 값만 표시하고 df는 변경하지 않습니다.
df.drop_duplicates(inplace = True)
값을 삭제하고 df를 변경합니다.
이게 도움이 되길 바랍니다.:)
inplace=True
함수를 불순물로 만듭니다.원래 데이터 프레임을 변경하고 없음을 반환합니다.그런 경우 DSL 체인을 끊습니다.대부분의 데이터 프레임 기능은 새로운 데이터 프레임을 반환하므로 DSL을 편리하게 사용할 수 있습니다.맘에 들다
df.sort_values().rename().to_csv()
가 있는 함수 :inplace=True
없음을 반환하고 DSL 체인이 끊어졌습니다.를 들어, .
df.sort_values(inplace=True).rename().to_csv()
NoneType object has no attribute 'rename'
파이썬의 내장 정렬 및 정렬과 유사한 것. lst.sort()
아온다를 합니다.None
그리고.sorted(lst)
새 목록을 반환합니다.
일적으 안함사용로를 사용하지 .inplace=True
특별한 이유가 없는 한.▁like할때ignment▁reass▁야▁you▁when작▁have와 같이 재배정 코드를 작성해야 할 때.df = df.sort_values()
를 들어 DSL 체에함호연보결오십시해.
df = pd.read_csv().sort_values()...
판다에 대한 나의 경험에 대해 대답하고 싶습니다.
'in-place='true' 인수는 데이터 프레임이 영구적으로 변경되어야 함을 나타냅니다.
df.dropna(axis='index', how='all', inplace=True)
동일한 데이터 프레임을 변경합니다(이 판다가 색인에서 NaN 항목을 찾아 삭제함).우리가 노력하면
df.dropna(axis='index', how='all')
Pandas는 변경 사항이 있는 데이터 프레임을 보여주지만 원래 데이터 프레임 'df'는 수정하지 않습니다.
제자리에서 사용하지 않는 경우=True 또는 use inplace=False 기본적으로 복사본을 반환합니다.
예를 들어, 다음과 같습니다.
testdf.sort_values(inplace=True, by='volume', ascending=False)
데이터가 내림차순으로 정렬된 구조를 변경합니다.
그러면:
testdf2 = testdf.sort_values( by='volume', ascending=True)
testdf2를 복사합니다.값은 모두 동일하지만 정렬이 반대로 되어 독립적인 개체를 갖게 됩니다.
다른 열이 주어지면 LongMA라고 말하면 다음을 수행합니다.
testdf2.LongMA = testdf2.LongMA -1
testdf의 LongMA 열은 원래 값을 가지며 testdf2는 분해된 값을 갖습니다.
계산 체인이 증가하고 데이터 프레임의 복사본이 자체 라이프사이클을 가짐에 따라 차이를 추적하는 것이 중요합니다.
언급URL : https://stackoverflow.com/questions/43893457/understanding-inplace-true-in-pandas
'source' 카테고리의 다른 글
Firebase용 클라우드 기능 - 이메일에 대한 작업 확인 (0) | 2023.06.13 |
---|---|
Firebase 인증을 위한 앱 이름 변경 방법(사용자가 보는 내용) (0) | 2023.06.13 |
설명에 대한 실행 컨텍스트를 찾거나 만들지 못했습니다. (0) | 2023.06.13 |
C에서 환경 변수 설정 (0) | 2023.06.08 |
MariaDB에서 동일한 쿼리를 애플리케이션에서 Sequitize를 통해 실행할 때 mysql 클라이언트 또는 CLI에서 직접 실행할 때보다 시간이 더 오래 걸리는 이유는 무엇입니까? (0) | 2023.06.08 |