如何将变量分配给函数内的合并 Pandas 数据框
How to assign variable to merged Pandas dataframe within function
我希望修改传递给此函数的数据帧。
def func(df):
left_df = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 'B'])
right_df = pd.DataFrame([[5, 6], [7, 8]], columns=['C', 'D'])
df = pd.merge(left_df, right_df, how='outer', left_index=True, right_index=True)
print("df is now a merged dataframe!")
test = pd.DataFrame()
func(test)
然而,由于 Python 按值传递,被调用者 func()
获得 df
的副本,该副本指向原始空数据帧。当它被分配给合并的数据帧时,它会创建一个由 pd.merge()
返回的新对象,并将 df
指向这个新对象。然而,test
没有改变,继续指向原来的空数据帧。
我们如何在 func()
中就地合并,以便 test
实际上发生变化?我想要像 pandas.DataFrame.update()
这样的东西,但这只能让你进行左连接。
IIUC,是这样的吗?
def func(df):
left_df = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 'B'])
right_df = pd.DataFrame([[5, 6], [7, 8]], columns=['C', 'D'])
df = pd.merge(left_df, right_df, how='outer', left_index=True, right_index=True)
print("df is now a merged dataframe!")
global test
test = df
test = pd.DataFrame()
func(test)
print(test)
输出:
df is now a merged dataframe!
A B C D
0 1 2 5 6
1 3 4 7 8
Python不传值!
注意:这通常是糟糕的编码习惯
证明
test = pd.DataFrame([[1, 2], [3, 4]])
def func(df):
df.loc[:] = df * 2
print(test)
func(test)
print(test)
0 1
0 1 2
1 3 4
0 1
0 2 4
1 6 8
您的问题是您正在命名名称 df
的本地版本。您需要以某种方式更改数据框 inplace
。
test = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB'))
def func(df):
df.loc[:, 'C'] = 9
print(test)
func(test)
print(test)
A B
0 1 2
1 3 4
A B C
0 1 2 9
1 3 4 9
我希望修改传递给此函数的数据帧。
def func(df):
left_df = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 'B'])
right_df = pd.DataFrame([[5, 6], [7, 8]], columns=['C', 'D'])
df = pd.merge(left_df, right_df, how='outer', left_index=True, right_index=True)
print("df is now a merged dataframe!")
test = pd.DataFrame()
func(test)
然而,由于 Python 按值传递,被调用者 func()
获得 df
的副本,该副本指向原始空数据帧。当它被分配给合并的数据帧时,它会创建一个由 pd.merge()
返回的新对象,并将 df
指向这个新对象。然而,test
没有改变,继续指向原来的空数据帧。
我们如何在 func()
中就地合并,以便 test
实际上发生变化?我想要像 pandas.DataFrame.update()
这样的东西,但这只能让你进行左连接。
IIUC,是这样的吗?
def func(df):
left_df = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 'B'])
right_df = pd.DataFrame([[5, 6], [7, 8]], columns=['C', 'D'])
df = pd.merge(left_df, right_df, how='outer', left_index=True, right_index=True)
print("df is now a merged dataframe!")
global test
test = df
test = pd.DataFrame()
func(test)
print(test)
输出:
df is now a merged dataframe!
A B C D
0 1 2 5 6
1 3 4 7 8
Python不传值!
注意:这通常是糟糕的编码习惯
证明
test = pd.DataFrame([[1, 2], [3, 4]])
def func(df):
df.loc[:] = df * 2
print(test)
func(test)
print(test)
0 1
0 1 2
1 3 4
0 1
0 2 4
1 6 8
您的问题是您正在命名名称 df
的本地版本。您需要以某种方式更改数据框 inplace
。
test = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB'))
def func(df):
df.loc[:, 'C'] = 9
print(test)
func(test)
print(test)
A B
0 1 2
1 3 4
A B C
0 1 2 9
1 3 4 9