将pandas数据帧转换为numpy数组 - 哪种方法更适合?

00_*_*_00 9 python numpy pandas

我需要将大型数据帧转换为numpy数组.仅保留数值和类型.我知道有很好的记录方法可以这样做.

那么,哪一个更喜欢?

df.values
df._as_matrix()
pd.to_numeric(df)
... others ...
Run Code Online (Sandbox Code Playgroud)

决策因素:

  • 效率

  • 安全地操作nan,np.nans和其他可能的意外值

  • 数值稳定

jpp*_*jpp 12

你提到的功能有不同的用途.

  1. pd.to_numeric:如果您的数据当前未以数字形式存储,或者您希望通过downcast='float'或转换 为最佳类型,则使用此选项转换数据框中的类型downcast='integer'.

  2. pd.DataFrame.to_numpy():使用此选项检索pd.DataFrame.values数据框的数组表示形式.

  3. numpy:不要用这个.它仅用于向后兼容.


asc*_*ter 6

在引擎盖下,a pandas.DataFrame只不过是a numpy.array。最简单且可能最快的方法是使用pandas.DataFrame.values

DataFrame.values

NDFrame的Numpy表示

笔记

dtype将是一个较低的公分母dtype(隐式向上转换);也就是说,如果dtypes(甚至是数字类型)混合在一起,则将选择容纳所有类型的dtypes。如果不处理块,请小心使用。

例如,如果dtype是float16和float32,则dtype将被向上转换为float32。如果dtype是int32和uint8,则dtype将被转换为int32。按照numpy.find_common_type约定,将int64和uint64混合使用将产生flot64 dtype。

  • Pandas 0.24 文档说不要再使用 .values(),无论是 .array 还是 .to_numpy()。请参阅 https://pandas.pydata.org/pandas-docs/stable/getting_started/basics.html,“过去,pandas 推荐使用 Series.values 或 DataFrame.values 来从 Series 或 DataFrame 中提取数据。您将仍然可以在旧代码库和网上找到对这些的引用。展望未来,我们建议避免 .values 并使用 .array 或 .to_numpy()。” (2认同)