元组中pandas数据帧的可变性

时间:2017-08-24 14:41:22

标签: python pandas dataframe tuples

我们都知道,Pandas中对DataFrame对象的任何变量赋值都只是一个引用,而不是一个新实例。但是,如果我将变量't'分配给由字符串和pandas DataFrame组成的元组,如下所示:

df=pd.DataFrame([[1,2,3],[4,5,6]])
t=('example',df)

当我这样做时:

new=t[1]

是变量new是对原始对象'df'的引用(即可变和暴露),或者它现在被称为新实例(即在这种情况下df是不可变的)?

谢谢。

1 个答案:

答案 0 :(得分:1)

  

变量new是否是对原始对象'df'的引用(即   可变的和暴露的)或现在它被称为一个新的实例?

你为什么不......

In [516]: id(df)
Out[516]: 4481803432

In [517]: id(t[1])
Out[517]: 4481803432
  

我认为它总是给出的元组(类似于行为字符串)   你是一个与列表不同的新对象......

错误。 tuplelist之间的唯一区别是前者是不可变的。两者都将成为相同参考文献的容器。

  

所以我想如果我们在一个元组中调用一个DataFrame就会创建一个新的   对象,无需执行.copy()

没有。如果需要副本,则需要显式调用.copy()。否则你正在使用相同的参考。

  

我可以有把握地说,复制()是一个好习惯   避免突变?

不是,因为大多数数据帧变异方法都返回数据帧的副本。除非您明确请求更改(例如使用inplace=True标志),否则永远不会进行更改。

您应该知道设置inplace=True不会提高效果,因为内部创建了副本,然后将其分配回原始版本。