当前位置: 首页 > 面试题库 >

检查数据框是在Pandas中复制还是查看

谭文林
2023-03-14
问题内容

是否有一种简单的方法来检查两个数据帧是否是不涉及操作的同一基础数据的不同副本或视图?我正在尝试掌握每一个生成的时间,并且鉴于规则看起来有多特殊,我想要一种简单的测试方法。

例如,我认为“ id(df.values)”在各个视图之间都是稳定的,但它们似乎不是:

# Make two data frames that are views of same data.
df = pd.DataFrame([[1,2,3,4],[5,6,7,8]], index = ['row1','row2'], 
       columns = ['a','b','c','d'])
df2 = df.iloc[0:2,:]

# Demonstrate they are views:
df.iloc[0,0] = 99
df2.iloc[0,0]
Out[70]: 99

# Now try and compare the id on values attribute
# Different despite being views!

id(df.values)
Out[71]: 4753564496

id(df2.values)
Out[72]: 4753603728

# And we can of course compare df and df2
df is df2
Out[73]: False

当然还有:-http :
//pandas.pydata.org/pandas-docs/stable/indexing.html#returning-a-view-versus-
a-copy

更新: 下面的注释似乎可以回答这个问题-
查看df.values.base属性而不是df.values属性,以及对df._is_copy属性的引用(尽管后者可能是非常糟糕的形式,因为它是内部的)。


问题答案:

HYRY和Marius在评论中的答案!

可以通过以下任一方式进行检查:

  • 测试values.base属性而不是values属性的等效性,例如:

df.values.base is df2.values.base代替df.values is df2.values

  • 或使用(必定是内部的)_is_view属性(df2._is_viewis True)。

谢谢大家!



 类似资料:
  • 问题内容: 我敢肯定有一种明显的方法可以做到这一点,但现在还不能想到任何光滑的东西。 基本上不是引发异常,而是要获取或查看pandas索引中是否存在值。 我现在工作的是以下内容 问题答案: 这应该可以解决问题

  • 问题内容: 如何确定给定数字是偶数还是奇数?我很久以来一直想弄清楚这个问题,而且还没到任何地方。 问题答案: 你可以使用模运算符,但这可能会很慢。如果是整数,则可以执行以下操作: 这是因为低位将始终设置为奇数。

  • 问题内容: 我有2个数据框。 我想遍历每行,并检查每个名称是否在中。 如果名称在其中,结果应返回1,否则返回0: 谢谢。 问题答案: 采用 在数据框中显示结果 在系列对象中

  • 问题内容: 我想查看数据框内特定列中是否存在特定字符串。 我遇到了错误 ValueError:系列的真值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。 问题答案: 将返回大小为布尔值的指标向量 因此,您可以使用 或者,如果您不在乎有多少条记录与您的查询匹配

  • 检查数组是空的还是不存在的最好方法是什么? 像这样的?