Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫数据帧的矩阵(位置)索引_Python_Pandas - Fatal编程技术网

Python 熊猫数据帧的矩阵(位置)索引

Python 熊猫数据帧的矩阵(位置)索引,python,pandas,Python,Pandas,假设我有以下数据帧: tmp = np.random.randn(10,4) df = pd.DataFrame(tmp, index=pd.date_range('1/1/2012', periods=tmp.shape[0]), columns=['A', 'B', 'C', 'D']) > b A B C D 2012-01-01 0.471846 1.13

假设我有以下数据帧:

tmp = np.random.randn(10,4)
df = pd.DataFrame(tmp, index=pd.date_range('1/1/2012', periods=tmp.shape[0]), 
                 columns=['A', 'B', 'C', 'D'])

> b
                   A         B         C         D
2012-01-01  0.471846  1.130041 -0.614117  0.882738
2012-01-02 -1.431566  0.680617 -0.615331  0.288740
2012-01-03  0.398567 -0.115388 -0.869855 -1.273666
2012-01-04  0.379501  0.192329 -1.942184  0.694004
2012-01-05  1.306329 -0.803856  0.417033 -0.655907
2012-01-06 -0.599877  0.696549 -0.252789  1.367977
2012-01-07 -1.618916  0.216571 -0.499880  0.386853
2012-01-08  0.415002  0.139775  0.251842  0.021379
2012-01-09  2.536787  0.737672 -0.740485 -0.890189
2012-01-10 -1.553530 -0.100950 -0.237478 -0.295612
我怎样做:

  • 特定行/列的位置索引?(并获取相应的子数据帧)
  • 行/列范围的位置索引?(并获取相应的子数据帧)
  • 对于单条目矩阵索引: 例如,假设我想在位置
    [1,2]
    中索引子数据帧(以numpy“矩阵”表示法)。输出应为:

                       C
    2012-01-02 -0.615331
    
                       B
    2012-01-02 -0.615331  
    2012-01-03 -0.869855 
    
    我试过以下三种方法,但都不管用:

    df[1,2]
    df[1][2]
    df.take([1])[2]
    
    唯一有效的方法似乎是:

    df.ix[1,2]
    df.irow(1)[2]
    
    但是:

    • 使用
      .ix
      进行位置索引是危险的,因为如果我的索引是整数(与上述情况中的日期相反),它将默认为标签索引。请在此处查看有关此的详细信息:

    • 使用
      irow
      很麻烦,因为它需要从
      ()
      表示法切换到
      []
      表示法(
      irow
      返回一个
      系列
      对象)

    对于范围矩阵索引: 例如,假设我想在(numpy矩阵表示法)中对位置
    [1:3,2:3]
    中的元素进行索引。输出应为:

                       C
    2012-01-02 -0.615331
    
                       B
    2012-01-02 -0.615331  
    2012-01-03 -0.869855 
    
    请注意,我排除了停止指数(即,我坚持numpy符号)


    有什么想法吗?

    这项经常被要求的功能很快就会到位
    如果您想用它进行测试,可以将其从分支上拔下

    这一经常要求的功能很快就会到位 如果您想使用它进行测试,您可以将其从分支中拔出这里有一个解决方法(直到提交所提到的特性请求@Jeff):

    这表明,即使使用无序整数索引,语法的工作方式也是相同的:

    In [206]: df2 = df.reset_index(drop=True)
    
    In [207]: index = range(10)
    
    In [208]: import random
    
    In [209]: random.shuffle(index)
    
    In [210]: df2.index = index
    
    In [212]: df2.ix[df2.index[1], df2.columns[2]]
    Out[212]: -0.3021434106214243
    
    In [213]: df2.ix[df2.index[1:3], df2.columns[2:3]]
    Out[213]: 
              C
    7 -0.302143
    2 -1.430387
    
    以下是一个解决方法(直到提交@Jeff提到的功能请求):

    这表明,即使使用无序整数索引,语法的工作方式也是相同的:

    In [206]: df2 = df.reset_index(drop=True)
    
    In [207]: index = range(10)
    
    In [208]: import random
    
    In [209]: random.shuffle(index)
    
    In [210]: df2.index = index
    
    In [212]: df2.ix[df2.index[1], df2.columns[2]]
    Out[212]: -0.3021434106214243
    
    In [213]: df2.ix[df2.index[1:3], df2.columns[2:3]]
    Out[213]: 
              C
    7 -0.302143
    2 -1.430387
    

    从pandas文档中:

    Pandas提供了一套方法,以获得纯粹基于整数的索引。语义与python和numpy切片密切相关。这些是基于0的索引。切片时,包括起始边界,而排除上限。尝试使用非整数时,即使是有效的标签也会引发索引器错误

    .iloc属性是主要的访问方法。以下是有效的输入:

    整数,例如5 整数的列表或数组[4,3,0]
    pandas文档中ints为1:7的切片对象:

    Pandas提供了一套方法,以获得纯粹基于整数的索引。语义与python和numpy切片密切相关。这些是基于0的索引。切片时,包括起始边界,而排除上限。尝试使用非整数时,即使是有效的标签也会引发索引器错误

    .iloc属性是主要的访问方法。以下是有效的输入:

    整数,例如5 整数的列表或数组[4,3,0]
    整数为1:7的切片对象

    这样的东西怎么样<代码>df.as_矩阵()[1:3,2:3]。您需要结果来保留所有数据帧元信息吗?谢谢@Zelazny7。这很好,但是是的,我真的很想保留数据帧元信息。像这样的东西怎么样<代码>df.as_矩阵()[1:3,2:3]。您需要结果来保留所有数据帧元信息吗?谢谢@Zelazny7。这很好,但是是的,我真的希望保留DataFrame元信息。.ix是正确的解决方案,因为您的帧在索引方案中没有任何歧义,使用整数将按照您的预期反应,例如通过numpy/python语义进行位置索引(只有当你有一个本身由整数组成的索引时,这是一个问题)。ix是正确的解决方案,因为你的框架在索引方案中没有任何歧义,使用整数将按照你的预期反应,例如通过numpy/python语义进行位置索引(只有当u的索引本身由整数组成时,这才是一个问题)