【问题标题】:Pandas: Convert array column to numpy MatrixPandas:将数组列转换为 numpy 矩阵
【发布时间】:2015-04-30 18:39:27
【问题描述】:

我有以下格式的数据:

Col1   Col2       Col3
1,    1424549456, "3 4"
2,    1424549457, "2 3 4 5"

& 已成功将其读入 pandas。

如何将 Col3 转换为以下形式的 numpy 矩阵:

# each value needs to become a 1 in the index of the col
# i.e. in the above example 3 is the 4th value, thus
# it is [0 0 0 1]  [0 indexing is included]
mtx = [0 0 0 1 1 0    # corresponds to first row
       0 0 1 1 1 1];  # corresponds to second row

感谢您提供的任何帮助!

【问题讨论】:

    标签: python csv numpy matrix pandas


    【解决方案1】:

    如果没有很多数据,你可以做类似的事情

    res = []
    def f(v):
        r = np.zeros(6, np.int)
        r[map(int, v.split())] = 1
        res.append(r)
    df.Col3.apply(f)
    mat = np.array(res)
    
    # if you really want it to be a matrix, you can do
    mat = np.matrix(res)
    

    查看this link 了解更多信息

    【讨论】:

      【解决方案2】:

      Since 0.13.1 还有str.get_dummies

      In [11]: s = pd.Series(["3 4", "2 3 4 5"])
      
      In [12]: s.str.get_dummies(sep=" ")
      Out[12]:
         2  3  4  5
      0  0  1  1  0
      1  1  1  1  1
      

      您必须确保列是整数(而不是字符串)并重新索引:

      In [13]: df = s.str.get_dummies(sep=" ")
      
      In [14]: df.columns = df.columns.map(int)
      
      In [15]: df.reindex(columns=np.arange(6), fill_value=0)
      Out[15]:
         0  1  2  3  4  5
      0  0  0  0  1  1  0
      1  0  0  1  1  1  1
      

      要获取 numpy 值,请使用 .values:

      In [16]: df.reindex(columns=np.arange(6), fill_value=0).values
      Out[16]:
      array([[0, 0, 0, 1, 1, 0],
             [0, 0, 1, 1, 1, 1]])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-26
        • 1970-01-01
        • 2021-07-22
        • 2018-07-25
        • 2013-06-30
        • 2014-12-19
        • 2017-05-17
        相关资源
        最近更新 更多