【发布时间】:2017-10-17 15:50:50
【问题描述】:
我想为数据框的对角线赋值。我能想到的最快方法是使用 numpy 的 np.diag_indices 并对 values 数组进行切片分配。但是,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 时,我需要编写一个函数并使其失败。我如何测试它是?我是否应该相信如果是这样,通过视图进行的分配将始终有效?
【问题讨论】:
-
您检查
d1.dtypes,它本身就是一个Series,然后检查是否都具有相同的值。 -
你的意思是
d2.dtypes.nunique()>1?