I am trying to append a pandas df which is outside of a function. Here, I want to append df2 (inside the function) with df (is located outside of the function).
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)
I am getting UnboundLocalError: local variable 'df' referenced before assignment error (and that is expected because of the variable scope).
I have gone through this post. But, the only one answer of this post suggested append outside of the function (though df is declared inside of the function). However, I need to declare the df outside of the function and need to append with df2 inside the function.
If I try df.append(df2) instead of df = df.append(df2), program is not giving any error but getting only df as output (without append).
Advertisement
Answer
df is a declared out of the function. If you want to modify it you should declare it explicitly but in this case df_t is useless.
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)
But the suggestion of @Neither is more pertinent:
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