【问题标题】:Convert Select Columns in Pandas Dataframe to Numpy Array将 Pandas Dataframe 中的选择列转换为 Numpy 数组
【发布时间】:2015-10-25 16:05:24
【问题描述】:

我想将除熊猫数据框的第一列之外的所有内容都转换为 numpy 数组。由于某种原因,使用DataFrame.to_matrix()columns= 参数不起作用。

df:

  viz  a1_count  a1_mean     a1_std
0   n         3        2   0.816497
1   n         0      NaN        NaN 
2   n         2       51  50.000000

我尝试了X=df.as_matrix(columns=[df[1:]]),但这会产生一个包含所有NaNs 的数组

【问题讨论】:

  • 您传递的是行而不是列名

标签: python numpy pandas


【解决方案1】:

简单的方法是“值”属性df.iloc[:,1:].values

a=df.iloc[:,1:]
b=df.iloc[:,1:].values

print(type(df))
print(type(a))
print(type(b))

所以,你可以得到类型

<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.frame.DataFrame'>
<class 'numpy.ndarray'>

【讨论】:

  • 或者如果你想按名称而不是位置提取列:df[['a1_count', 'a1_mean', 'a1_std']].values
【解决方案2】:

请使用Pandas to_numpy() 方法。下面是一个例子--

>>> import pandas as pd
>>> df = pd.DataFrame({"A":[1, 2], "B":[3, 4], "C":[5, 6]})
>>> df 
    A  B  C
 0  1  3  5
 1  2  4  6
>>> s_array = df[["A", "B", "C"]].to_numpy()
>>> s_array

array([[1, 3, 5],
   [2, 4, 6]]) 

>>> t_array = df[["B", "C"]].to_numpy() 
>>> print (t_array)

[[3 5]
 [4 6]]

希望这会有所帮助。您可以使用

选择任意数量的列
columns = ['col1', 'col2', 'col3']
df1 = df[columns]

然后应用to_numpy() 方法。

【讨论】:

    【解决方案3】:

    columns 参数接受列名的集合。您正在传递一个包含两行数据框的列表:

    >>> [df[1:]]
    [  viz  a1_count  a1_mean  a1_std
    1   n         0      NaN     NaN
    2   n         2       51      50]
    >>> df.as_matrix(columns=[df[1:]])
    array([[ nan,  nan],
           [ nan,  nan],
           [ nan,  nan]])
    

    改为传递您想要的列名:

    >>> df.columns[1:]
    Index(['a1_count', 'a1_mean', 'a1_std'], dtype='object')
    >>> df.as_matrix(columns=df.columns[1:])
    array([[  3.      ,   2.      ,   0.816497],
           [  0.      ,        nan,        nan],
           [  2.      ,  51.      ,  50.      ]])
    

    【讨论】:

    • 谢谢。我有一种感觉,我错过了一些微不足道的东西。
    • 我想补充一点,as_matrix 将在未来的版本中被删除,并且我收到的消息说要改用 .values。
    • as_matrix 现已弃用。
    • 尝试使用values 而不是as_matrix
    • 从 0.24.0 版开始,只需在您的列上使用 to_numpy 方法 (pandas.pydata.org/pandas-docs/stable/reference/api/…)
    【解决方案4】:

    希望这个简单的一个班轮有所帮助:

    cols_as_np = df[df.columns[1:]].to_numpy()
    

    【讨论】:

      【解决方案5】:

      转换为 Numpy 数组的最佳方法是使用 '.to_numpy(self, dtype=None, copy=False)'。它是 0.24.0.Refrence 版本中的新功能@

      你也可以使用'.array'.Refrence

      Pandas .as_matrix 自 0.23.0 版起已弃用。

      【讨论】:

        【解决方案6】:

        最快最简单的方法是使用.as_matrix()。一条短线:

        df.iloc[:,[1,2,3]].as_matrix()
        

        给予:

        array([[3, 2, 0.816497],
           [0, 'NaN', 'NaN'],
           [2, 51, 50.0]], dtype=object)
        

        通过使用列的索引,您可以将此代码用于具有不同列名的任何数据框。

        以下是您的示例的步骤:

        import pandas as pd
        columns = ['viz', 'a1_count', 'a1_mean', 'a1_std']
        index = [0,1,2]
        vals = {'viz': ['n','n','n'], 'a1_count': [3,0,2], 'a1_mean': [2,'NaN', 51], 'a1_std': [0.816497, 'NaN', 50.000000]}
        df = pd.DataFrame(vals, columns=columns, index=index)
        

        给予:

           viz  a1_count a1_mean    a1_std
        0   n         3       2  0.816497
        1   n         0     NaN       NaN
        2   n         2      51        50
        

        然后:

        x1 = df.iloc[:,[1,2,3]].as_matrix()
        

        给予:

        array([[3, 2, 0.816497],
           [0, 'NaN', 'NaN'],
           [2, 51, 50.0]], dtype=object)
        

        x1 是numpy.ndarray

        【讨论】:

          猜你喜欢
          • 2019-08-04
          • 2020-02-10
          • 2018-12-27
          • 1970-01-01
          • 1970-01-01
          • 2019-05-05
          • 2020-08-20
          • 1970-01-01
          • 2021-05-29
          相关资源
          最近更新 更多