[英]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 主體,都是該塊的本地,除非您使用特殊關鍵字global
或nonlocal
。
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.