pandas 属性错误:'Series'对象没有属性'as_matrix'为什么出错?

fzsnzjdm  于 2023-06-20  发布在  其他
关注(0)|答案(3)|浏览(160)

当我执行官方网站的代码时,我得到这样的错误。代码如下:

landmarks_frame = pd.read_csv(‘F:\OfficialData\faces\face_landmarks.csv’)
n = 65
img_name = landmarks_frame.iloc[n, 0]
landmarks = landmarks_frame.iloc[n, 1:].as_matrix()
landmarks = landmarks.astype(‘float’).reshape(-1, 2)

列表项

j2cgzkjk

j2cgzkjk1#

正如另一个答案中所述,as_matrix方法自0.23.0起就被弃用,因此您应该使用to_numpy。但是,我想强调的是,as_matrixto_numpy具有不同的签名:as_matrix将列名列表作为其参数之一,以防您希望将转换限制为原始DataFrame的子集; to_numpy不接受这样的参数。因此,只有当您希望完全转换DataFrame时,这两个方法才完全可以互换。如果您(就像我的情况一样)需要转换矩阵的一个子集,那么在这两个用例中的用法将非常不同。
例如,假设我们只需要将原始DataFrame的子集['col1 ',' col2','col4']转换为Numpy数组。在这种情况下,您可能有一些依赖as_matrix进行转换的遗留代码,看起来或多或少类似于:

df.as_matrix(['col1', 'col2', 'col4'])

在将上面的代码转换为to_numpy时,不能像下面这样简单地替换函数名:

df.to_numpy(['col1', 'col2', 'col4'])  # WRONG

因为to_numpy不接受列的子集作为参数。在这种情况下,解决方案是首先进行选择,然后将to_numpy应用于结果,如下所示:

df[['col1', 'col2', 'col4']].to_numpy()  # CORRECT
zwghvu4y

zwghvu4y2#

as_matrix方法的目的是
将帧转换为其Numpy数组表示。
as_matrix方法自0.23.0起已弃用
0.25.1 documentation说:自版本0.23.0起弃用:使用DataFrame.values()代替
这两种选择是
1.. values():返回numpy.ndarray
1.. to_numpy():返回numpy.ndarray
但是,.values()文档给出了另一个警告:-Warning We recommend using DataFrame.to_numpy() instead.
我用一种稍微不同的方式得到了这个错误:AttributeError: 'DataFrame' object has no attribute 'as_matrix'

taor4pac

taor4pac3#

as_matrix()方法在新版本的pandas库中被弃用,但您也可以使用to_numpy()方法或.values属性。您应该注意到values是一个属性,必须使用点表示法调用,并且末尾没有括号。否则会出错。例如上面提到的代码行:

landmarks = landmarks_frame.iloc[n, 1:].as_matrix()

应改为:

landmarks = landmarks_frame.iloc[n, 1:].values

而不是:landmarks = landmarks_frame.iloc[n, 1:].values()-->这会导致错误

相关问题