熊猫从一个数据框写入NaN,然后将链式分配到另一个数据框中

2024-05-20 13:35:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为print_df的pandas数据帧,它从numpy记录数组tv收集值。当我尝试在print_dftv.之间进行链式赋值时,我得到了一些非常奇怪的行为

因此,我将记录数组转换成一个名为tv.的数据帧,然后确保两个数据帧的列是等价的

      for idx in range(number_of_runs):
        tv = pd.DataFrame(self.res_array['run'][idx], dtype='float64')
        tv.columns = ['year',
                        'f1',
                        'f2',
                        'f3',
                        'm1',
                        'm2',
                        'm3']

        print_df.ix[(idx * self.duration):(idx * self.duration +
                                          self.duration - 1), 0] = idx
        print_df.ix[(idx * self.duration):(idx * self.duration +
                                         self.duration - 1), 1:] = tv

下面是一些示例数据

         year    f1   f2    f3    m1    m2     m3 
    0    0.0  14.0  3.0  19.0  37.0  28.0  239.0   
    1    1.0  13.0  6.0  20.0  38.0  25.0  238.0        
    2    2.0  12.0  8.0  20.0  40.0  23.0  239.0       
    3    3.0  13.0  9.0  21.0  40.0  22.0  238.0      
    4    4.0  16.0  9.0  21.0  38.0  22.0  239.0 

第一次迭代的赋值是平稳的,但是所有后续的迭代都会导致print_df数据帧中的nan。两个数据帧的大小是相等的,因此没有问题。我还尝试了使用基于索引的选择.iloc,但没有什么不同

我还认为tv中的列名可能是导致错误的原因,因为有一个列被称为index.,这就是我确保显式命名所有列的原因

当然有更多的python方法来编写这段代码,但我首先希望在清理代码之前让chain赋值工作


Tags: 数据selfdf记录数组tvyearf2