【问题标题】:Pandas-Merge Multiple Column Values to a NumPy ArrayPandas-将多列值合并到 NumPy 数组
【发布时间】:2021-08-03 17:03:16
【问题描述】:

我需要为文本数据集提取词嵌入。由于 Elmo 需要花费大量时间来处理庞大的数据集,因此我尝试通过将其分成批次并将值存储在 CSV 文件中来并行化该过程。现在我有一个由大约 1024 列组成的数据框,其中包含单词嵌入。

示例数据框:

Col 1 Col 2 Col 3
0.1 0.25 0.4
0.2 0.3 -0.1

我需要做的是将值按行组合到一列,这需要是 Numpy 数组而不是列表。
这就是我需要的样子:
PS: Col 4 中的值需要是 NumPy 数组类型。

Col 1 Col 2 Col 3 Col 4
0.1 0.25 0.4 [0.1,0.25,0.4]
0.2 0.3 -0.1 [0.2,0.3,-0.1]

到目前为止我已经尝试过:

np.array(DF.iloc[:,0:1023].values.tolist())

但这会引发以下错误:

ValueError: 传递的项目数错误 1023,位置暗示 1

我该怎么做?任何意见将是有益的。提前致谢!

【问题讨论】:

    标签: python pandas dataframe numpy


    【解决方案1】:

    在轴 1 上尝试 applyto_numpy

    import pandas as pd
    
    df = pd.DataFrame({'Col 1': {0: 0.1, 1: 0.2},
                       'Col 2': {0: 0.25, 1: 0.3},
                       'Col 3': {0: 0.4, 1: -0.1}})
    
    df['Col 4'] = df.apply(lambda s: s.to_numpy(), axis=1)
    
    print(df)
    

    df:

       Col 1  Col 2  Col 3             Col 4
    0    0.1   0.25    0.4  [0.1, 0.25, 0.4]
    1    0.2   0.30   -0.1  [0.2, 0.3, -0.1]
    

    【讨论】:

      【解决方案2】:

      你很接近,转换为numpy数组后需要.tolist()

      df['Col 4'] = np.array(df.to_numpy()).tolist()
      print (df)
         Col 1  Col 2  Col 3             Col 4
      0    0.1   0.25    0.4  [0.1, 0.25, 0.4]
      1    0.2   0.30   -0.1  [0.2, 0.3, -0.1]
      

      对于您的数据:

      DF['Col 4'] = np.array(DF.iloc[:,0:1023].to_numpy().tolist())
      

      【讨论】:

        【解决方案3】:
        import pandas as pd
        import numpy as np
        

        您可以使用apply() 方法和array() 方法:

        df['Col4']=np.array(df.apply(np.array,1))
        

        df的输出:

           Col 1  Col 2  Col 3             Col 4
        0    0.1   0.25    0.4  [0.1, 0.25, 0.4]
        1    0.2   0.30   -0.1  [0.2, 0.3, -0.1]
        

        【讨论】:

          【解决方案4】:

          您可以在.apply() 中使用np.array,如下:

          df['Col 4'] = df.apply(np.array, axis=1)
          

          结果:

          print(df)
          
             Col 1  Col 2  Col 3             Col 4
          0    0.1   0.25    0.4  [0.1, 0.25, 0.4]
          1    0.2   0.30   -0.1  [0.2, 0.3, -0.1]
          
          
          df['Col 4'].map(type)
          
          0    <class 'numpy.ndarray'>
          1    <class 'numpy.ndarray'>
          Name: Col 4, dtype: object
          
          

          【讨论】:

          • 顺便说一句,它与stackoverflow.com/a/67518811/14289892 完全相同,但您只是移除了上层覆盖......即np.array()
          • 相同的结果,但简化了做同样事情的方式。无需使用 2 np.array()。一个就够了。这是我们需要注意的细微差别。
          • 即使你只是删除 np.array() 但它是完全相同的解决方案....bruh..btw 我同意它更简化,没有必要
          • 我认为我们必须避免冗余代码。当然你可以说 1 * (2 + 3) 和 (2 + 3) 一样,但是你会用哪一个呢?
          猜你喜欢
          • 2021-04-24
          • 1970-01-01
          • 1970-01-01
          • 2017-12-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-05
          • 2019-03-12
          相关资源
          最近更新 更多