Подтвердить что ты не робот

Задайте значение для конкретной ячейки в pandas DataFrame с помощью iloc

У меня есть вопрос, похожий на этот и этот. Разница в том, что я должен выбирать строку по положению, так как я не знаю индекс.

Я хочу сделать что-то вроде df.iloc[0, 'COL_NAME'] = x, но iloc не разрешает такой доступ. Если я сделаю df.iloc[0]['COL_NAME] = x, появится предупреждение о цепочке индексирования.

4b9b3361

Ответ 1

Для смешанного положения и индекса используйте .ix. НО вам нужно убедиться, что ваш индекс не целочисленный, иначе это вызовет путаницу.

df.ix[0, 'COL_NAME'] = x

Обновление:

В качестве альтернативы попробуйте

df.iloc[0, df.columns.get_loc('COL_NAME')] = x

Пример:

import pandas as pd
import numpy as np

# your data
# ========================
np.random.seed(0)
df = pd.DataFrame(np.random.randn(10, 2), columns=['col1', 'col2'], index=np.random.randint(1,100,10)).sort_index()

print(df)


      col1    col2
10  1.7641  0.4002
24  0.1440  1.4543
29  0.3131 -0.8541
32  0.9501 -0.1514
33  1.8676 -0.9773
36  0.7610  0.1217
56  1.4941 -0.2052
58  0.9787  2.2409
75 -0.1032  0.4106
76  0.4439  0.3337

# .iloc with get_loc
# ===================================
df.iloc[0, df.columns.get_loc('col2')] = 100

df

      col1      col2
10  1.7641  100.0000
24  0.1440    1.4543
29  0.3131   -0.8541
32  0.9501   -0.1514
33  1.8676   -0.9773
36  0.7610    0.1217
56  1.4941   -0.2052
58  0.9787    2.2409
75 -0.1032    0.4106
76  0.4439    0.3337

Ответ 2

Здесь я бы добавил, что функция at на фрейме данных намного быстрее, особенно если вы выполняете много присваиваний отдельных (не срезовых) значений.

df.at[index, 'col_name'] = x

По моему опыту я получил ускорение в 20 раз. Вот текст на испанском языке, но он все же дает представление о том, что происходит.

Ответ 3

Если вы знаете позицию, почему бы просто не получить индекс от этого?

Затем используйте .loc:

df.loc[index, 'COL_NAME'] = x

Ответ 4

Ты можешь использовать:

df.set_value('Row_index', 'Column_name', value)

set_valye в ~ 100 раз быстрее, чем метод .ix. Также лучше использовать df['Row_index']['Column_name'] = value.

Но поскольку set_value устарела, теперь .iat/.at - хорошая замена.

Например, если у нас есть этот data_frame

   A   B   C
0  1   8   4 
1  3   9   6
2  22 33  52

если мы хотим изменить значение ячейки [0, "A"], мы можем сделать

df.iat[0,0] = 2

или df.at[0,'A'] = 2

Ответ 5

Другой способ - получить индекс строки, а затем использовать df.loc или df.at.

# get row index 'label' from row number 'irow'
label = df.index.values[irow] 
df.at[label, 'COL_NAME'] = x

Ответ 6

Другой способ это:

df["COL_NAME"].iloc[0]=x

Ответ 7

Расширение ответа set_value, используя set_value set_value в пандах. Устанавливает значение для столбца по заданному индексу.

Из документации панд:

DataFrame.set_value (index, col, value)

Чтобы установить значение для определенного индекса для столбца, выполните:

df.set_value(index, 'COL_NAME', x)

Надеюсь, поможет.

Ответ 8

У меня была эта проблема много раз, и я обнаружил, что эти ответы неясны, устарели и т.д., Также много раз. Вот решение мне понадобилось много раз:

df ['COL_NAME']. iloc [row_number] = 42

После этого:

df.COL_NAME [row_number] == 42

Правда