Я хочу присвоить значения диагонали кадра данных. Самый быстрый способ, который я могу придумать, - использовать numpy np.diag_indices
и выполнить назначение среза в массиве values
. Тем не менее, массив значений является только представлением и готов принять назначение, когда фреймворк данных имеет один dtype
Рассмотрим кадры данных d1
и d2
d1 = pd.DataFrame(np.ones((3, 3), dtype=int), columns=['A', 'B', 'C'])
d2 = pd.DataFrame(dict(A=[1, 1, 1], B=[1., 1., 1.], C=[1, 1, 1]))
d1
A B C
0 0 1 1
1 1 0 1
2 1 1 0
d2
A B C
0 1 1.0 1
1 1 1.0 1
2 1 1.0 1
Тогда получим наши индексы
i, j = np.diag_indices(3)
d1
имеет один dtype
и, следовательно, работает
d1.values[i, j] = 0
d1
A B C
0 0 1 1
1 1 0 1
2 1 1 0
Но не на d2
d2.values[i, j] = 0
d2
A B C
0 1 1.0 1
1 1 1.0 1
2 1 1.0 1
Мне нужно написать функцию и сделать ее неудачной, если df
имеет смешанный dtype
. Как я могу проверить, что это такое? Должен ли я доверять этому, если это так, это задание с помощью представления всегда будет работать?