簡體   English   中英

是否可以從 function 到 append 一個 df (在外部聲明)

[英]Is it possible to append a df (which is declared outside) from a function

我正在嘗試 append 一個 pandas df,它位於 function 之外。 在這里,我想 append df2 (函數內部)與df (位於函數外部)。

import pandas as pd

df = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB'), index=['x', 'y'])

def test(df_t):
    df2 = pd.DataFrame([[5, 6], [7, 8]], columns=list('AB'), index=['x', 'y'])
    df = df.append(df2)
    print(df)

test(df)

我收到UnboundLocalError: local variable 'df' referenced before assignment error(這是預期的,因為變量范圍)。

我已經瀏覽了這篇文章 但是,這篇文章的唯一一個答案建議 append 在 function 之外(盡管 df 在函數內部聲明)。 但是,我需要在 function 之外聲明df ,並且需要在append中使用df2聲明 append。

如果我嘗試df.append(df2)而不是df = df.append(df2) ,則程序不會給出任何錯誤,而是僅將df作為 output (不附加)。

您的問題是以下行。

df = df.append(df2)

在 python 中,塊中聲明的所有內容,例如 function 主體,都是該塊的本地,除非您使用特殊關鍵字globalnonlocal

def test(df_t):
    global df
    df2 = pd.DataFrame([[5, 6], [7, 8]], columns=list('AB'), index=['x', 'y'])
    df = df.append(df2)
    print(df)

除此之外,function 和命名有點亂,IMO。 如果可以,您應該避免此類全局聲明,並將 dataframe 傳遞到 function 中,正如您的簽名所暗示的那樣。

使用全局變量並不是很好,因為您的 function 有副作用。 你永遠無法可靠地預測它的行為,因為它依賴於外部的某些東西。 如果外部發生變化,您的 function 的行為會有所不同,即使調用者沒有改變它調用 function 的方式。

df是在 function 中聲明的。 如果你想修改它,你應該明確聲明它,但在這種情況下df_t是無用的。

df = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB'), index=['x', 'y'])

def test():  # <- df_t is useless now
    global df  # HERE
    df2 = pd.DataFrame([[5, 6], [7, 8]], columns=list('AB'), index=['x', 'y'])
    df = df.append(df2)
    print(df)

test(df)

但@Neither 的建議更中肯:

def test(df_t):
    df2 = pd.DataFrame([[5, 6], [7, 8]], columns=list('AB'), index=['x', 'y'])
    return df_t.append(df2)

test()

Output:

   A  B
x  1  2
y  3  4
x  5  6
y  7  8

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM