Python 在';行不通

Python 在';行不通,python,pandas,Python,Pandas,我想知道为什么这个列交换不起作用。它使df_old的两列相等。对此的解释会有所帮助。不过,我可以使用列索引交换列。但我不知道为什么这不起作用。原因是你不创建副本,而是创建引用 试试这个: def columnchange (df_old, a=None, b=None): x=df_old[a] df_old[a]=df_old[b] df_old[b]=x return df

我想知道为什么这个列交换不起作用。它使df_old的两列相等。对此的解释会有所帮助。不过,我可以使用列索引交换列。但我不知道为什么这不起作用。

原因是你不创建副本,而是创建引用

试试这个:

        def columnchange (df_old, a=None, b=None):
             x=df_old[a]
             df_old[a]=df_old[b]
             df_old[b]=x
             return df_old
进一步解释:

    def columnchange (df_old, a=None, b=None):
         x=df_old[a].copy()
         df_old[a]=df_old[b].copy()
         df_old[b]=x
         return df_old

意味着您可以执行
x=x+1
,结果也将出现在
df_old[a]
中。因为您创建了一个引用,或者说是一个系列的“同义词”,而不是一个副本。

为什么您不交换列名称呢?我只是先尝试了这种方法,在交换两个整数值的情况下效果很好。但我想知道这不起作用的原因。谢谢你的解释。现在可以了。
x = df_old[a]