/ / Как да пресечем рамката за данни на панда, за да извлечете конкретни редове и избрани колони - python, pandas

Как да пресечем рамката за панда данни, за да извлечете конкретни редове и избрани колони - phyton, pandas

Имам Whole_mat като pandas df. corpus_index като валидни редове, които искам да копирам в New_mat и искам само колони номера 1, 4 и 7. Но трябва да бъде 7, 1, 4. По-долу е това, което аз се опитах, но аз съм се TypeError: unhashable тип: списък ". Цялата мат форма е, да речем, Nx10, искам nx3 за New_mat.

New_mat = []
for i in range(len(corpus_index):
index = corpus_index[i]
New_mat.append(Whole_mat[[index], [7,1,4]])
print New_mat

Какво би могло да бъде по-добър начин за решаване на проблема ми?

Отговори:

0 за отговор № 1

Всичко, от което се нуждаете, е просто индексиране. Пример:

In [1]: import pandas as pd

In [2]: import numpy as np

In [3]: df = pd.DataFrame([np.random.rand(10) for _ in xrange(10)])

In [4]: df.ix[[1,4,5],[3,4,5]]
Out[4]:
3         4         5
1  0.523302  0.104327  0.672953
4  0.303693  0.785685  0.080759
5  0.955738  0.987779  0.410638

Повече информация тук: http://pandas.pydata.org/pandas-docs/stable/indexing.html

И винаги, когато използвате панди, избягвайте колкото се може по-скоро (не е необходимо много често). Цялата цел на използването на панди е векторността.


1 за отговор № 2

Аз не мисля, че трябва да итерат, използвайки за цикъл, бихте могли да опитате да направите това,

New_mat = Whole_mat.loc[corpus_index.index, Whole_mat.columns[[7, 1, 4]]]

Забележка: Индексите на колоните започват от 0.