Есть несколько способов сделать это.Оба требуют преобразования ваших данных в тип object
, чтобы присвоить строки ранее float
серии.
Опция 1: numpy
Для этого необходимо ввести координаты через целочисленный массив или,как здесь, список кортежей.
import numpy as np
# convert to numpy object array
vals = df.values.astype(object)
# transform coordinates
coords = [(3, 0), (0, 1), (4, 2)]
idx = np.r_[coords].T
# apply indices
vals[idx[0], idx[1]] = 'spam'
# create new dataframe
res = pd.DataFrame(vals, index=df.index, columns=df.columns)
print(res)
A B C
0 0.1 spam 0.07
1 0.4 0.3 0.3
2 0.7 0.17 0.13
3 spam 0.04 0.24
4 0.15 0.07 spam
Вариант 2: pd.DataFrame.at
Не векторизованное, но более простое решение - использовать pd.DataFrame.at
в цикле for
:
coords = [(3, 'A'), (0, 'B'), (4, 'C')]
df = df.astype(object)
for row, col in coords:
df.at[row, col] = 'spam'
print(df)
A B C
0 0.1 spam 0.07
1 0.4 0.3 0.3
2 0.7 0.17 0.13
3 spam 0.04 0.24
4 0.15 0.07 spam