У меня есть образец фрейма данных 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
Возможный дубликат Выберите строки Pandas на основе индекса списка






Обозначение панд для нарезки:
df.iloc[0:4,:]
Спасибо за Ваш ответ. не могли бы вы объяснить мне, что происходит внутри этого кода и где я сделал ошибку?
Конечно, iloc означает целочисленное местоположение, в основном вы указываете «позицию», если ваши индексы были упорядочены от 0 до размера вашего фрейма данных. Итак; 2007-06-18 'находится в позиции 0, чтобы восстановить эту строку, вы можете выполнить либо df.loc [' 2007-06-18 ',:], либо df.iloc [0 ,:]. Ошибка, которую вы сделали, заключалась в том, что вы использовали loc вместо iloc. Loc требует, чтобы вы указали индекс в том же типе данных, что и индекс фрейма данных, поэтому df.loc [n] не работал
Используйте 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. Супер информативный, если не сказать немного запутанный на первом проходе.
@Ben Я уже пробовал использовать приведенное выше утверждение. Но это дает мне славу пустых данных.