Python 如何将ndarray形状(32 x xxx)转换为单列数据帧,同时丢弃此数组的最后十个对象

Python 如何将ndarray形状(32 x xxx)转换为单列数据帧,同时丢弃此数组的最后十个对象,python,arrays,pandas,dataframe,pytorch,Python,Arrays,Pandas,Dataframe,Pytorch,在批大小为32的数据集上运行二元分类NLP模型后,我得到了一个大小为32×300的预测数组,最后一批大小为24。我试图在数据帧中重新排列这些值 predictions.append(logits.argmax(1)) 但是,当我尝试将其转换为数据帧时 df.labels = pd.DataFrame(predictions) df.labels.head() 这就是我得到的 0 0.0 1 0.0 2 0.0 3 0.0 4 0.0 Name: labels

在批大小为32的数据集上运行二元分类NLP模型后,我得到了一个大小为32×300的预测数组,最后一批大小为24。我试图在数据帧中重新排列这些值

predictions.append(logits.argmax(1))
但是,当我尝试将其转换为数据帧时


df.labels = pd.DataFrame(predictions)
df.labels.head()

这就是我得到的

0    0.0
1    0.0
2    0.0
3    0.0
4    0.0
Name: labels, dtype: float64
  • 我希望将值设置为1或0整数,而不是浮点数
  • 最终数据批次32的NaN值为24到32,而不是空白

  • 如果列包含
    NaN
    ,则它将始终为
    float
    类型。因此,
    NaN
    值的存在解释了为什么列是
    float

    您必须有维度问题,您的预测变量是二维的,32 x 10,您应该首先将其展平,然后添加24个元素,请参见文档:

    这里发生的事情是,当您将一行24个元素添加到一个包含32列的数据框中时,23到32列中的最后一列将存在,并将自动用NaN填充。参见一些示例和示例

    为什么要将
    NaN
    转换为空白?若blank意味着一个空字符串,那个么就不应该这样做,因为您将在列中混合使用float和string

    如果需要整数值。您应该使用常量整数值(比如888)对
    NaN
    值进行插补:

    然后,您可以使用以下函数将all转换为int:


    这就是我的工作

    predictions.append(logits.argmax(1))
    flat_predictions = np.concatenate(predictions, axis=0)
    df = pd.DataFrame(data=flat_predictions, columns=["gold_label",])
    
    

    不起作用。在过去,我已经通过传递“int64”尝试过这一点。我知道,由于最后一个数组有24个值而不是32个值,所以列默认为float64。让我澄清一下。我没有将列值设置为NaN。在尝试将nparray转换为dataframe之前,该列不存在。我希望它做的是将例如[32]*10+[24]n数组重新排列为len(df)=344的单列数据帧。相反,它将其转换为一个len(df)352数组,并用NaN填充最后8个值,从而将我的原始类型转换为浮点型。如果有一个数组,则应在转换为数据帧之前进行展平。追加之前的
    预测的形状是什么?320 ? 在344之后呢?你这里一定有维度问题。也许我解释得不够好。以下是32个批次的300批模型预测。最后一批是24个。数组([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0])数组([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])我想将它们组合成一个数据帧列。我现在清楚了吗?您尝试将一行24列添加到一个包含32列的数据框架中,如果这样做,24列将在开始处添加,最后一列(25到32)将填充NaN。数据帧就是这样工作的,列或行的形状(长度)不会改变。我更新了答案。
    
    predictions = predictions.flatten()
    
    to_append = logits.argmax(1) # this is your array with 24 elements 
    predictions = predictions.append(to_append)
    
    df = df.fillna(888)
    
    df = df.astype('int16')
    
    predictions.append(logits.argmax(1))
    flat_predictions = np.concatenate(predictions, axis=0)
    df = pd.DataFrame(data=flat_predictions, columns=["gold_label",])
    
    
        gold_label
    0   0
    1   0
    2   0
    3   0
    4   0
    ...