오류 ""DataFrame' 개체에 '첨부' 속성이 없습니다."
DataFrame 개체에 사전을 추가하려고 하는데 다음 오류가 발생합니다.
AttributeError: 'DataFrame' 개체에 'append' 속성이 없습니다.
제가 알기로는, DataFrame에는 "첨부"라는 방법이 있습니다.
코드 조각:
df = pd.DataFrame(df).append(new_row, ignore_index=True)
나는 그 사전을 기대하고 있었습니다.new_row
새 행으로 추가됩니다.
어떻게 고치죠?
팬더 2.0 기준으로.append
(이전에는 사용하지 않음)이(가) 제거되었습니다.
대부분의 애플리케이션에 대해 대신 다음을 사용해야 합니다.
df = pd.concat([df, pd.DataFrame([new_row])], ignore_index=True)
@cottontail에서 언급한 바와 같이 사용할 수도 있지만, 이는 새 인덱스가 DataFrame에 아직 없는 경우에만 작동합니다(일반적으로 인덱스가 다음과 같은 경우에 해당됨).RangeIndex
:
df.loc[len(df)] = new_row # only use with a RangeIndex!
왜 없앴죠?
우리는 팬더의 새로운 사용자들이 순수한 파이썬으로 하는 것처럼 코딩을 시도하는 것을 자주 봅니다.루프에서 항목에 액세스하는 데 사용합니다(여기에서 사용하지 않아야 하는 이유 참조).append
파이썬과 비슷한 방법으로
하지만, 팬더의 호 #35407에서 언급되었듯이, 팬더와 팬더는 실제로 같은 것이 아닙니다.list.append
팬더들은 제자리에 있고 팬더들은append
새 DataFrame을 만듭니다.
Series.append와 DataFrame.append를 사용하지 않는 것이 좋을 것 같습니다.그들은 list.append와 유사한 것을 만들고 있지만, 동작이 맞지 않고 있을 수도 없기 때문에 이는 잘못된 비유입니다.결과를 생성하려면 인덱스 및 값에 대한 데이터를 복사해야 합니다.
이것들은 분명히 대중적인 방법이기도 합니다.DataFrame.append는 API 문서에서 10번째로 많이 방문한 페이지입니다.
제가 착각하지 않는 한, 사용자는 항상 값 목록을 작성하여 작성자에게 전달하거나 NDFrames 목록을 작성한 후 하나의 콘캣을 작성하는 것이 좋습니다.
결과적으로, 반면에list.append
는 루프의 각 단계에서 O(1)을 상각하고, 팬더' 는 반복 삽입을 수행할 때 비효율적입니다.
이 과정을 반복해야 할 경우에는 어떻게 합니까?
사용.append
아니면concat
반복적으로 좋은 아이디어는 아닙니다(이는 각 단계에 대해 새로운 DataFrame을 생성할 때 2차적으로 동작합니다).
이 경우, 새로운 항목은 목록에 수집되어야 하며, 루프가 끝날 때 다음으로 변환됩니다.DataFrame
그리고 결국 원작에 연결되고 말았습니다.DataFrame
.
lst = []
for new_row in items_generation_logic:
lst.append(new_row)
# create extension
df_extended = pd.DataFrame(lst, columns=['A', 'B', 'C'])
# or columns=df.columns if identical columns
# concatenate to original
out = pd.concat([df, df_extended])
한 줄이면.loc
그 일을 할 수도 있습니다.
df.loc[len(df)] = new_row
와 loc
이 인덱스 출,터스로다이됩니다.len(df)
가 가 에만 이 과 이 에만 가 과 RangeIndex
;RangeIndex
명시적 인덱스가 데이터 프레임 생성자에게 전달되지 않으면 기본적으로 생성됩니다.
작동 예:
df = pd.DataFrame({'A': range(3), 'B': list('abc')})
df.loc[len(df)] = [4, 'd']
df.loc[len(df)] = {'A': 5, 'B': 'e'}
df.loc[len(df)] = pd.Series({'A': 6, 'B': 'f'})
, , 에서, 하는, 를 사용하여 을 확장하는 .DataFrame.append
아니면concat
아니면loc
을 확대하고 한 번 하기 위해 코드를 작성하는 해 보십시오 Python 하고 을 을 하기 합니다 를 을 하는 합니다 을 하는 을 를
@mozway가 지적한 바와 같이 팬더 데이터 프레임을 확대하는 것은 각 반복에서 전체 데이터 프레임을 읽고 복사해야 하기 때문에 O(n^2) 복잡도를 가집니다.다음 성능 그림은 한 1번 수행된 연결에 대한 런타임 차이를 보여 줍니다.보다시피, 데이터 프레임을 확장하는 두 가지 방법 모두 목록을 확장하고 데이터 프레임을 한 번 구성하는 것보다 훨씬, 훨씬 느립니다(예: 10k 행의 데이터 프레임의 경우,concat
에서 약 더 느리고배 800더고고약고고더n약0loc
루프에서 약 1600배 느려짐).
1 퍼펙트 플롯을 생성하는 데 사용되는 코드:
import pandas as pd
import perfplot
def concat_loop(lst):
df = pd.DataFrame(columns=['A', 'B'])
for dic in lst:
df = pd.concat([df, pd.DataFrame([dic])], ignore_index=True)
return df.infer_objects()
def concat_once(lst):
df = pd.DataFrame(columns=['A', 'B'])
df = pd.concat([df, pd.DataFrame(lst)], ignore_index=True)
return df.infer_objects()
def loc_loop(lst):
df = pd.DataFrame(columns=['A', 'B'])
for dic in lst:
df.loc[len(df)] = dic
return df
perfplot.plot(
setup=lambda n: [{'A': i, 'B': 'a'*(i%5+1)} for i in range(n)],
kernels=[concat_loop, concat_once, loc_loop],
labels= ['concat in a loop', 'concat once', 'loc in a loop'],
n_range=[2**k for k in range(16)],
xlabel='Length of dataframe',
title='Enlarging a dataframe in a loop',
relative_to=1,
equality_check=pd.DataFrame.equals);
면책 사항: 이 답변은 인기를 끄는 것 같지만, 제안된 접근 방식을 사용해서는 안 됩니다.append
로 변경되지 않았습니다._append
,_append
개인 내부 방식이고append
팬더 API에서 제거되었습니다."판다의 방법은 목록과 비슷해 보입니다. 파이썬에 첨부합니다. 그렇기 때문에 팬더의 부록 방법이 ""로 수정되었습니다."는 완전히 잘못된 것입니다.선두를_
단 한 가지를 의미합니다: 이 방법은 비공개이며 팬더의 내부 코드 밖에서 사용하기 위한 것이 아닙니다.
팬더의 새로운 버전에서는.append
메소드가 다음으로 변경됩니다._append
. 간단히 사용할 수 있습니다._append
에 대신에append
를 들면, , , , , .df._append(df2)
.
df = df1._append(df2,ignore_index=True)
왜 바뀌었습니까?
append
팬더의 method는 list.append in python과 비슷해 보입니다.그것이 팬더의 부록 방법이 현재 수정된 이유입니다._append
.
AttributeError: 'DataFrame' 개체에 'append' 속성이 없습니다.'_append'를 말씀하신 건가요?
TensorFlow 2.12의 호환성을 갖춘 Panda의 경우, 사용자는 성공을 위해 작은 변화를 주기만 하면 됩니다.
all_data = train_df.append(test_df)
append를 _append로 변경
all_data = train_df._append(test_df)
그러면 프로그램이 올바르게 실행될 수 있습니다.
언급URL : https://stackoverflow.com/questions/75956209/error-dataframe-object-has-no-attribute-append
'IT' 카테고리의 다른 글
everyauth vs passport.js? (0) | 2023.09.15 |
---|---|
LXD 공유 /var/lib/mysql을 호스트에서 컨테이너로 공유하고 사용자/그룹을 매핑합니다. (0) | 2023.09.15 |
워드프레스에서 비교할 추가를 만드는 방법? (0) | 2023.09.15 |
Linux 터미널의 클립보드에 파일 내용 복사 (0) | 2023.09.15 |
ORA-02264: 기존 제약 조건에서 이미 사용된 이름 (0) | 2023.09.15 |