我需要将一个大型数据框转换为numpy数组。仅保留数值和类型。
我知道有一些被充分记录的方法可以这样做。
那么,应该优先选择哪种方法呢?
df.values
df._as_matrix()
pd.to_numeric(df)
... others ...
决策因素:
效率
安全地操作nan,np.nans和其他可能的意外值
数值稳定
我需要将一个大型数据框转换为numpy数组。仅保留数值和类型。
我知道有一些被充分记录的方法可以这样做。
那么,应该优先选择哪种方法呢?
df.values
df._as_matrix()
pd.to_numeric(df)
... others ...
决策因素:
效率
安全地操作nan,np.nans和其他可能的意外值
数值稳定
你提到的这些函数有不同的作用。
pd.to_numeric
: 如果你的数据当前未以数值形式存储,或者你希望通过 downcast='float'
或 downcast='integer'
将其转换为最优类型,可以使用此功能来转换数据类型。
pd.DataFrame.to_numpy()
(v0.24+)或pd.DataFrame.values
:使用此功能获取数据框的 numpy
数组表示。
pd.DataFrame.as_matrix
:请勿使用此功能。它仅包含用于向后兼容性。
pandas.DataFrame
不过是一个numpy.array
。最简单、可能也是最快的方法是使用pandas.DataFrame.values
。
DataFrame.values
返回NDFrame的Numpy表示形式
注意事项
数据类型将会是低公共分母数据类型(隐式向上转型);也就是说,如果数据类型(即使是数值类型)混合在一起,那么将会选择适应所有类型的数据类型。如果你没有处理块,则要小心使用此函数。
例如:如果数据类型为float16和float32,数据类型将向上转型为float32。如果数据类型为int32和uint8,数据类型将向上转型为int32。根据numpy.find_common_type约定,混合int64和uint64将导致flot64数据类型。