sourcetip

Pandas.append() 방법에 대한 좋은 대안은 이제 더 이상 사용되지 않습니다.

fileupload 2023. 9. 5. 20:44
반응형

Pandas.append() 방법에 대한 좋은 대안은 이제 더 이상 사용되지 않습니다.

나는 데이터 프레임에 단일 행을 추가하기 위해 다음 방법을 많이 사용합니다.제가 정말 좋아하는 한 가지는 간단한 딕트 객체를 추가할 수 있다는 것입니다.예:

# Creating an empty dataframe
df = pd.DataFrame(columns=['a', 'b'])

# Appending a row
df = df.append({ 'a': 1, 'b': 2 }, ignore_index=True)

다시 말하지만, 제가 이것에 대해 가장 좋아하는 것은 코드가 매우 깨끗하고 줄이 거의 필요하지 않다는 것입니다.이제 권장되는 대안은 다음과 같습니다.

# Create the new row as its own dataframe
df_new_row = pd.DataFrame({ 'a': [1], 'b': [2] })
df = pd.concat([df, df_new_row])

그래서 이전에 코드 한 줄은 이제 일회용 변수와 새로운 데이터 프레임을 만드는 여분의 크래프트가 있는 두 줄이었습니다. :( 과거에 제가 했던 것처럼 (더 이상 사용되지 않는) 딕트를 사용하는 좋은 방법이 있을까요?

필요한 경우 사전으로 목록을 만든 다음 새 데이터 프레임을 만듭니다.df = pd.DataFrame.from_records(your_list)목록의 "추가" 방법은 매우 효율적이며 사용되지 않습니다.반면, 데이터 프레임은 설계상 자주 다시 생성되고 모든 데이터가 추가될 때 복사됩니다. 이 때문에 이 방법은 더 이상 사용되지 않습니다.

저는 부록 방법도 좋아합니다.하지만 당신은 받아쓰기 목록으로 한 줄로 그것을 할 수 있습니다.

df = pd.concat([df, pd.DataFrame.from_records([{ 'a': 1, 'b': 2 }])])

또는 증분 오름차순 색인이 있는 데이터 프레임의 값에 loc 및 tuples 사용

df.loc[len(df), ['a','b']] = 1, 2

아니면 아마도

df.loc[len(df), df.columns] = 3, 4

사용할 경우concat대신:

append

outputxlsx = outputxlsx.append(df, ignore_index=True)

concat

outputxlsx = pd.concat([outputxlsx, df], ignore_index=True)

저도 비슷한 문제에 직면해 있었습니다.다른 해결책들은 저에게 효과가 없었습니다.이것이 특정 검색에 대한 첫 번째 구글 결과이고 저 자신이 적어도 두 번째로 여기서 끝났기 때문에 저는 이 문제를 다루기 위한 추가적인 가능성으로 이 답변을 남깁니다.

내 경우 데이터는 딕트가 아니라 알려진 매개 변수 집합에 대한 값 목록일 뿐입니다.데이터 프레임에 매개 변수 값을 행으로 추가하려고 합니다. 이렇게 하면 df[parameter]를 통해 하나의 매개 변수에 대한 일련의 모든 값에 액세스할 수 있기 때문입니다.

빈 DataFrame으로 시작합니다.

parameters = ['a', 'b', 'c', 'd', 'e', 'f']
df = pd.DataFrame(columns=parameters)

df:

        a   b   c   d   e   f

추가 기능을 사용하면 다음과 같이 매우 편리하게 행을 추가할 수 있습니다.

new_row = pd.Series([1,2,3,4,5,6], index=parameters, name='row1')
df.append(new_row)

df:

        a   b   c   d   e   f
row1    1   2   3   4   5   6

PD.concat을 사용하여 매우 유사한 방법으로 동일한 결과를 제공하는 것으로 나타났습니다.

new_row = pd.DataFrame([1,2,3,4,5,6], columns=['row1'], index=parameters).T
df = pd.concat((df, new_row))

핵심은 1d 데이터에서 (1,n)개의 데이터 프레임을 생성한 다음 다른 데이터 프레임과 일치하도록 전치하는 것이었습니다.

저처럼 많은 한 줄기보다는 설명적인 기능을 원하는 사람들을 위해 위의 @Rafael Gaitan에 기반한 옵션이 있습니다.

def appendDictToDF(df,dictToAppend):
  df = pd.concat([df, pd.DataFrame.from_records([dictToAppend])])
  return df

# Creating an empty dataframe
df = pd.DataFrame(columns=['a', 'b'])

# Appending a row
df= appendDictToDF(df,{ 'a': 1, 'b': 2 })
# Deprecated issue has been resolved

# Creating an empty dataframe
df = pd.DataFrame(columns=['a', 'b'])
print("df columns:", df)

# Appending a row
df = df.append({ 'a': 1, 'b': 2 }, ignore_index=True)
print("df column Values :", df)

# Create the new row as its own dataframe
df_new_row = pd.DataFrame.from_records({ 'a': [3], 'b': [4] })
df = pd.concat([df, df_new_row])
print("pd concat with two df's :", df)

다음 명령을 사용할 수 있습니다.

#If your index is a string
df.loc["name of the index"] = pd.Series({"Column 1" : Value1, "Column 2" : Value2,
"Column 3" : Value3, "Column 4" : Value4, ...})

#If your index is a number
df.loc[len(df)] = pd.Series({"Column 1" : Value1, "Column 2" : Value2,
"Column 3" : Value3, "Column 4" : Value4, ...})

변경사항은 초기 데이터 프레임에 저장됩니다.

언급URL : https://stackoverflow.com/questions/70837397/good-alternative-to-pandas-append-method-now-that-it-is-being-deprecated

반응형