YC *_*ang 22 python numpy pandas
当我执行官网的代码时,出现这样的错误。为什么?代码显示如下:
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)
Run Code Online (Sandbox Code Playgroud)
项目清单
Sal*_*lli 47
如另一个答案中所述,该as_matrix
方法自 0.23.0 起已弃用,因此您应该to_numpy
改用。但是,我想强调一个事实,as_matrix
并且to_numpy
具有不同的签名:as_matrix将列名列表作为其参数之一,以防您想将转换限制为原始 DataFrame 的子集;to_numpy不接受这样的参数。因此,只有当您想完全转换 DataFrame 时,这两种方法才完全可以互换。如果您(如我的情况)需要转换矩阵的子集,则两种用例的用法将大不相同。
例如,假设我们只需要将原始 DataFrame 的子集 ['col1', 'col2', 'col4'] 转换为 Numpy 数组。在这种情况下,您可能有一些依赖于as_matrix
转换的遗留代码,它或多或少看起来像:
df.as_matrix(['col1', 'col2', 'col4'])
Run Code Online (Sandbox Code Playgroud)
将上述代码转换为to_numpy
您不能简单地替换函数名称,如:
df.to_numpy(['col1', 'col2', 'col4']) # WRONG
Run Code Online (Sandbox Code Playgroud)
因为to_numpy
不接受列的子集作为参数。在这种情况下,解决方案是先进行选择,然后应用于to_numpy
结果,如下所示:
df[['col1', 'col2', 'col4']].to_numpy() # CORRECT
Run Code Online (Sandbox Code Playgroud)
Rem*_*oon 19
as_matrix
方法的目的是
将帧转换为其 Numpy 数组表示。
as_matrix
方法自 0.23.0
起已弃用0.25.1 文档说:自 0.23.0 版起已弃用:改为使用 DataFrame.values()
两种选择是
但是,.values()
文档给出了另一个警告:-Warning We recommend using DataFrame.to_numpy() instead.
我以稍微不同的方式得到了错误: AttributeError: 'DataFrame' object has no attribute 'as_matrix'