К сожалению, индексирование iloc
не предназначено для настройки столь же универсальным способом, как для получения. Однако есть некоторый обходной путь, если вы хотите, чтобы ваша строка x
и столбец y
были динамическими, как в вашем примере.
Для следующего я использовал pandas.Dataframe пример документации , где мы начинаем с кадра данных, как показано ниже.
my_dict = [{'a': 1, 'b': 2, 'c': 3, 'd': 4},
{'a': 100, 'b': 200, 'c': 300, 'd': 400},
{'a': 1000, 'b': 2000, 'c': 3000, 'd': 4000 }]
df = pandas.DataFrame(my_dict)
Шаг 1: Получить строку
Очень просто,Вы можете получить свой ряд, взяв df.iloc[x]
. Если бы у вас было x = 1
, в приведенном выше примере мы получили бы:
> df.iloc[x]
a 100
b 200
c 300
d 400
Когда у нас есть строка, подобная этой, мы можем получить это значение 300
, используя индекс 'c'
.
> df.iloc[x]['c']
300
Если все, что у вас есть, это индекс столбца, вам сначала нужно получить это имя.
Шаг 2: Получить имя столбца
Toпреобразуйте ваш индекс y
в имя столбца, мы можем использовать свойство dataframe axes
, как показано ниже:
> y = 2
> df.axes[1][y]
c
Шаг 3: Поместите еговместе
Теперь, если мы хотим использовать x
и y
для ссылки на конкретную запись в кадре данных, мы можем сделать это, сначала получив row
, а затем column
, например:
row = df.iloc[x]
column = df.axes[1][y]
row[column] = desired_value
Или, если вы хотите написать его в одну строку:
df.iloc[x][df.axes[1][y]]
Полный пример
Вот полный пример этого в действии.
import pandas
x = 1
y = 2
my_dict = [{'a': 1, 'b': 2, 'c': 3, 'd': 4},
{'a': 100, 'b': 200, 'c': 300, 'd': 400},
{'a': 1000, 'b': 2000, 'c': 3000, 'd': 4000 }]
df = pandas.DataFrame(my_dict)
desired_value = 999
row = df.iloc[x]
column = df.axes[1][y]
row[column] = desired_value
print(df)
Это оператор печати в конце дает нам:
a b c d
0 1 2 3 4
1 100 200 999 400
2 1000 2000 3000 4000
Обратите внимание на 999
, которое мы установили с row[column] = desired_value
.