我有不同列中的数据,但我不知道如何提取它以将其保存在另一个变量中.
index a b c
1 2 3 4
2 3 4 5
Run Code Online (Sandbox Code Playgroud)
我该如何选择'a','b'并保存到DF1?
我试过了
df1 = df['a':'b']
df1 = df.ix[:, 'a':'b']
Run Code Online (Sandbox Code Playgroud)
似乎没有工作.
我对Pandas在决定数据帧中的选择是原始数据帧的副本还是原始数据的视图时使用的规则感到困惑.
如果我有,例如,
df = pd.DataFrame(np.random.randn(8,8), columns=list('ABCDEFGH'), index=range(1,9))
Run Code Online (Sandbox Code Playgroud)
我明白a query返回一个副本,就像这样
foo = df.query('2 < index <= 5')
foo.loc[:,'E'] = 40
Run Code Online (Sandbox Code Playgroud)
对原始数据帧没有影响df.我也理解标量或命名切片返回一个视图,以便分配给这些,例如
df.iloc[3] = 70
Run Code Online (Sandbox Code Playgroud)
要么
df.ix[1,'B':'E'] = 222
Run Code Online (Sandbox Code Playgroud)
会改变df.但是当谈到更复杂的案件时,我迷失了方向.例如,
df[df.C <= df.B] = 7654321
Run Code Online (Sandbox Code Playgroud)
变化df,但是
df[df.C <= df.B].ix[:,'B':'E']
Run Code Online (Sandbox Code Playgroud)
才不是.
是否有一个简单的规则,熊猫正在使用,我只是缺少?在这些特定情况下发生了什么; 特别是,如何更改满足特定查询的数据帧中的所有值(或值的子集)(正如我在上一个示例中尝试做的那样)?
注意:这与此问题不同 ; 我已经阅读了文档,但没有得到它的启发.我还阅读了关于这个主题的"相关"问题,但我仍然缺少Pandas正在使用的简单规则,以及我如何应用它 - 例如 - 修改值(或值的子集)在满足特定查询的数据框中.
有没有一种简单的方法可以检查两个数据框是不同的副本还是不涉及操作的相同基础数据的视图?我试图抓住每一个生成的时间,并且考虑到规则似乎有多特殊,我想要一种简单的测试方法.
例如,我认为"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 …
说我有一个数据帧
import pandas as pd
import numpy as np
foo = pd.DataFrame(np.random.random((10,5)))
Run Code Online (Sandbox Code Playgroud)
我从我的数据子集创建另一个数据帧:
bar = foo.iloc[3:5,1:4]
Run Code Online (Sandbox Code Playgroud)
确实bar持有这些元素的副本foo?有没有办法创建view这些数据呢?如果是这样,如果我尝试修改此视图中的数据会发生什么?Pandas是否提供任何类型的写时复制机制?