Сообщение об ошибке: не удается выполнить индексацию фрагмента нас этими индексаторами [[2]] из - PullRequest
0 голосов
/ 08 октября 2018

Я хочу скопировать строки из одного кадра данных в другой на основе индексов, хранящихся в массиве.При использовании следующего кода:

df1=pd.DataFrame(
   {
        "column_1": [1, 2, 3, 4],
        "column_2": ['A','B','C','D'],
        "column_3": [3.1, 7.8, 9.0, 5.8]
   }
)
   Arr1=np.array([[2],[3]])

   column_name = ['column_2','column_3'];
   index_row=range(4);
   df2 = pd.DataFrame(index=index_row,columns=column_name);

   for i in range(4):
          df2[i:i+1]=df1[(Arr1[i]):(Arr1[i]+1)]

я получаю следующую ошибку: не могу выполнить индексирование срезов для класса 'pandas.core.indexes.range.RangeIndex' с этими индексаторами [[2]] класса 'numpy.ndarray '.

Может ли кто-нибудь предложить правильный подход?

1 Ответ

0 голосов
/ 08 октября 2018

Чтобы правильно использовать идентификаторы, преобразуйте массив в список, содержащий только значения.i[0] получает первое (и в данном случае только одно) значение из списка [2] и [3].

Затем используйте .loc[ids,columns], чтобы выбрать строки и столбцы, которые вы хотите скопировать.Нет необходимости в петле здесь.Это более простой и быстрый подход

df1=pd.DataFrame({
    "column_1": [1, 2, 3, 4],
    "column_2": ['A','B','C','D'],
    "column_3": [3.1, 7.8, 9.0, 5.8]})
Arr1=np.array([[2],[3]])
#------------new-----------------
ids=[i[0] for i in Arr1.tolist()]
#--------------------------------


column_name = ['column_2','column_3']


#------------new-----------------
df2 = df1.loc[ids,column_name]
#--------------------------------
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...