簡體   English   中英

熊貓中DataFrame的矩陣(位置)索引

[英]Matricial (positional) indexing of DataFrames in 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.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. 行/列范圍的位置索引? (並獲得相應的子數據幀

對於單項矩陣索引:

例如,假設我要在位置[1,2] (以numpy“矩陣”表示法)中索引子數據幀。 輸出應為:

                   C
2012-01-02 -0.615331

我嘗試了以下三種方法,但是它們都不起作用:

df[1,2]
df[1][2]
df.take([1])[2]

起作用的唯一方法似乎是:

df.ix[1,2]
df.irow(1)[2]

但:

  • 使用.ix進行位置索引是很危險的,因為如果我的索引是整數(與上述情況中的日期相反),它將默認標記為索引 在此處查看更多信息: 開始:停止在numpy和Pandas之間切片不一致?

  • 使用irow很麻煩,因為它需要從()表示法切換為[]表示法( irow返回Series對象)

對於范圍矩陣索引:

例如,假設我要在(numpy矩陣表示法)的位置[1:3,2:3]中索引元素。 輸出應為:

                   B
2012-01-02 -0.615331  
2012-01-03 -0.869855 

請注意,我排除停止索引 (即我堅持使用numpy表示法)。

有什么想法嗎?

經常會要求使用此功能, https://github.com/pydata/pandas/pull/2922如果您想對其進行測試,可以將其從分支中拉出

這是一種解決方法(直到提交了@Jeff提到的功能請求):

In [178]: df = pd.DataFrame(tmp, index=pd.date_range('2012-1-1', periods=tmp.shape[0]), columns='A B C D'.split())

In [179]: df.ix[df.index[1], df.columns[2]]
Out[179]: -0.3021434106214243

In [180]: df.ix[df.index[1:3], df.columns[2:3]]
Out[180]: 
                   C
2012-01-02 -0.302143
2012-01-03 -1.430387

這表明語法即使以隨機整數索引的形式也以相同的方式工作:

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提供了一組方法來獲得純粹基於整數的索引。 語義緊隨python和numpy切片。 這些是基於0的索引。 切片時,包括開始邊界,但不包括上限。 嘗試使用非整數,即使有效標簽也將引發IndexError。

.iloc屬性是主要的訪問方法。 以下是有效輸入:

整數,例如5 A整數列表或數組[4,3,0]整數為1:7的切片對象

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM