【发布时间】:2012-11-02 00:57:33
【问题描述】:
我有兴趣了解如何将 pandas 数据帧转换为 NumPy 数组。
数据框:
import numpy as np
import pandas as pd
index = [1, 2, 3, 4, 5, 6, 7]
a = [np.nan, np.nan, np.nan, 0.1, 0.1, 0.1, 0.1]
b = [0.2, np.nan, 0.2, 0.2, 0.2, np.nan, np.nan]
c = [np.nan, 0.5, 0.5, np.nan, 0.5, 0.5, np.nan]
df = pd.DataFrame({'A': a, 'B': b, 'C': c}, index=index)
df = df.rename_axis('ID')
给予
label A B C
ID
1 NaN 0.2 NaN
2 NaN NaN 0.5
3 NaN 0.2 0.5
4 0.1 0.2 NaN
5 0.1 0.2 0.5
6 0.1 NaN 0.5
7 0.1 NaN NaN
我想将其转换为 NumPy 数组,如下所示:
array([[ nan, 0.2, nan],
[ nan, nan, 0.5],
[ nan, 0.2, 0.5],
[ 0.1, 0.2, nan],
[ 0.1, 0.2, 0.5],
[ 0.1, nan, 0.5],
[ 0.1, nan, nan]])
我该怎么做?
作为奖励,是否可以像这样保留数据类型?
array([[ 1, nan, 0.2, nan],
[ 2, nan, nan, 0.5],
[ 3, nan, 0.2, 0.5],
[ 4, 0.1, 0.2, nan],
[ 5, 0.1, 0.2, 0.5],
[ 6, 0.1, nan, 0.5],
[ 7, 0.1, nan, nan]],
dtype=[('ID', '<i4'), ('A', '<f8'), ('B', '<f8'), ('B', '<f8')])
或类似的?
【问题讨论】:
-
为什么需要这个?无论如何,数据帧不是基于 numpy 数组吗?您应该能够在需要 numpy 数组的地方使用数据框。这就是为什么您可以将数据帧与 scikit-learn 一起使用,其中函数要求 numpy 数组。
-
这里有几个可能与 dtypes 和 recarrays(又名记录数组或结构化数组)相关的链接:(1) stackoverflow.com/questions/9949427/… (2) stackoverflow.com/questions/52579601/…
-
注意: 必须像这样将 Pandas DataFrame 转换为数组(或列表)可能表明存在其他问题。我强烈建议确保 DataFrame 是适合您的特定用例的数据结构,并且 Pandas 不包含任何执行您感兴趣的操作的方式。
标签: python arrays pandas numpy dataframe