Нарезка кадра данных по его индексу и массиву в python

У меня есть образец фрейма данных df и массив n, как показано ниже. Я хочу фильтровать на основе значений массива, которые находятся в индексе. Фрейм выходных данных также показан ниже. Я пробовал Out = df[df.index == n], Out = df.loc[df.index == n] и df.loc[n], которые не работают, давая ошибку Lengths must match to compare. Может ли кто-нибудь помочь мне в решении этого вопроса. Здесь массив - это номер строки, соответствующий фрейму данных.

df = 
             Open   High    Low    Close    Adj Close   Volume
2007-06-18  0.33979 0.33979 0.33979 0.33979 0.33979 1591888
2007-06-29  0.33074 0.33074 0.33074 0.33074 0.33074 88440
2007-06-20  0.33526 0.33526 0.33526 0.33526 0.33526 3538
2007-06-21  0.32113 0.32113 0.32113 0.32113 0.32113 3550
2007-06-22  0.34713 0.34713 0.34713 0.34713 0.34713 670
2007-06-16  0.33979 0.33979 0.33979 0.33979 0.33979 1591888
2007-06-30  0.33074 0.33074 0.33074 0.33074 0.33074 88440
2007-06-31  0.33526 0.33526 0.33526 0.33526 0.33526 3538
2007-06-44  0.32113 0.32113 0.32113 0.32113 0.32113 3550
2007-06-22  0.34713 0.34713 0.34713 0.34713 0.34713 670

n = array([0, 1, 2, 3])

Out  = 
            Open      High  Low     Close   Adj Close   Volume
2007-06-18  0.33979 0.33979 0.33979 0.33979 0.33979 1591888
2007-06-29  0.33074 0.33074 0.33074 0.33074 0.33074 88440
2007-06-20  0.33526 0.33526 0.33526 0.33526 0.33526 3538
2007-06-21  0.32113 0.32113 0.32113 0.32113 0.32113 3550

@Ben Я уже пробовал использовать приведенное выше утверждение. Но это дает мне славу пустых данных.

Alex_MN 17.07.2018 15:59

Возможный дубликат Выберите строки Pandas на основе индекса списка

Georgy 17.07.2018 16:04
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
205
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Обозначение панд для нарезки:

df.iloc[0:4,:]

Спасибо за Ваш ответ. не могли бы вы объяснить мне, что происходит внутри этого кода и где я сделал ошибку?

Alex_MN 17.07.2018 16:02

Конечно, iloc означает целочисленное местоположение, в основном вы указываете «позицию», если ваши индексы были упорядочены от 0 до размера вашего фрейма данных. Итак; 2007-06-18 'находится в позиции 0, чтобы восстановить эту строку, вы можете выполнить либо df.loc [' 2007-06-18 ',:], либо df.iloc [0 ,:]. Ошибка, которую вы сделали, заключалась в том, что вы использовали loc вместо iloc. Loc требует, чтобы вы указали индекс в том же типе данных, что и индекс фрейма данных, поэтому df.loc [n] не работал

Yuca 17.07.2018 16:40
Ответ принят как подходящий

Используйте DataFrame.iloc для выбора по позициям:

n = np.array([     0,      1,      2, 3])
df = df.iloc[n]
print (df)
               Open     High      Low    Close  Adj Close   Volume
2007-06-18  0.33979  0.33979  0.33979  0.33979    0.33979  1591888
2007-06-29  0.33074  0.33074  0.33074  0.33074    0.33074    88440
2007-06-20  0.33526  0.33526  0.33526  0.33526    0.33526     3538
2007-06-21  0.32113  0.32113  0.32113  0.32113    0.32113     3550

Замените все между <> вашим вводом

# slice by column position
df.iloc[<start_row>:<end_row>, <column_start_position>:<column_end_position>]
# for everything in a column
df.iloc[:, <column_position>]


# slice by column name
df.loc[<start_row>:<end_row>, <column_name>]
# for everything in a column
df.loc[:, <column_name>]

Просмотрите также Индексирование и выбор данных в документации pandas. Супер информативный, если не сказать немного запутанный на первом проходе.

Другие вопросы по теме