有没有一种简单的方法可以检查两个数据框是不同的副本还是不涉及操作的相同基础数据的视图?我试图抓住每一个生成的时间,并且考虑到规则似乎有多特殊,我想要一种简单的测试方法.
例如,我认为"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
Run Code Online (Sandbox Code Playgroud)
其他答案我已经抬头试图给出规则,但似乎不一致,也不回答如何测试的问题:
当然: - http://pandas.pydata.org/pandas-docs/stable/indexing.html#returning-a-view-versus-a-copy …
我在numpy中遇到了以下奇怪的东西,可能是也可能不是bug:
import numpy as np
dt = np.dtype([('tuple', (int, 2))])
a = np.zeros(3, dt)
type(a['tuple'][0]) # ndarray
type(a[0]['tuple']) # ndarray
a['tuple'][0] = (1,2) # ok
a[0]['tuple'] = (1,2) # ValueError: shape-mismatch on array construction
Run Code Online (Sandbox Code Playgroud)
我原以为这两个选项都有用.意见?
可能是一个微不足道的问题,但我需要了解这里发生了什么(以及如何解决它).
假设我有一个包含列'a'和'b'的数据框,如下所示:
f = pandas.DataFrame({'a':[1,2,3,4,5], 'b':[10,20,30,40,50]})
Run Code Online (Sandbox Code Playgroud)
现在对于3个或更少的'a'的每个元素,我想将'b'的相应元素除以10.
f[f['a']<=3]['b'] = (f[f['a']<=3]['b'])/10
Run Code Online (Sandbox Code Playgroud)
因此,'b'列中的值现在应为[1,2,3,40,50].
但我发现'b'栏保持不变!是什么赋予了?