Python 3.x 将pandas数据帧中的最后2个数值逐行替换为NAN';s

Python 3.x 将pandas数据帧中的最后2个数值逐行替换为NAN';s,python-3.x,pandas,numpy,dataframe,Python 3.x,Pandas,Numpy,Dataframe,我的数据中每一行的最后两个实数是用误差测量的。我想用np.NAN来代替它们。实数的数量因行而异(即,每行已经有一些不同数量的NAN)。列标题表示测量值,索引为实验性试验。单元格中的值等于测量读数。一些试验比其他试验有更多的测量读数;因此,某些行比其他行具有更多的NAN。下面的代码创建了一个类似于我的数据帧 import pandas as pd import numpy as np data = np.array(([1,2,3,4,5,2,np.NaN], [2,2,

我的数据中每一行的最后两个实数是用误差测量的。我想用np.NAN来代替它们。实数的数量因行而异(即,每行已经有一些不同数量的NAN)。列标题表示测量值,索引为实验性试验。单元格中的值等于测量读数。一些试验比其他试验有更多的测量读数;因此,某些行比其他行具有更多的NAN。下面的代码创建了一个类似于我的数据帧

   import pandas as pd
   import numpy as np
   data = np.array(([1,2,3,4,5,2,np.NaN], 
   [2,2,3,2,3,np.NaN,np.NaN],[4,4,5,1,np.NaN,np.NaN,np.nan]))
   df1 = pd.DataFrame(data, columns = ['0','1','2','3','4','5','6'])
代码生成的数据帧与我的代码类似:

       0    1   2   3   4   5   6
    0 1.0  2.0 3.0 4.0 5.0 2.0 NAN
    1 2.0  2.0 3.0 2.0 3.0 NAN NAN  
    2 4.0  4.0 5.0 1.0 NAN NAN NAN  
这就是我希望新数据帧的外观:

      0    1    2   3   4   5   6
    0 1.0  2.0 3.0 4.0 NAN NAN NAN
    1 2.0  2.0 3.0 NAN NAN NAN NAN  
    2 4.0  4.0 NAN NAN NAN NAN NAN      
我曾尝试计算NAN,并使用它来定位最后一个和第二个到最后一个数值的位置,但我没有找到位置

最终,我要做的是忽略原始数据帧中的NAN,并获取一行中的最后两个实数(即整数),并用np.NAN替换它们。一个主要问题是,一行中最后两个实数的位置可能因行而异。使原始数据帧看起来像上述示例中的新数据帧。

方法1将简单地将所有数据移2,并保持非空值:

In [61]: df.where(df.shift(-2, axis=1).notnull())
Out[61]: 
     0    1    2    3   4   5   6
0  1.0  2.0  3.0  4.0 NaN NaN NaN
1  2.0  2.0  3.0  NaN NaN NaN NaN
2  4.0  4.0  NaN  NaN NaN NaN NaN
方法#2是从右边计算非空值的数量,并且只在第二个之后保留非空值:

In [62]: df.where((df.notnull().iloc[:, ::-1].cumsum(axis=1) > 2))
Out[62]: 
     0    1    2    3   4   5   6
0  1.0  2.0  3.0  4.0 NaN NaN NaN
1  2.0  2.0  3.0  NaN NaN NaN NaN
2  4.0  4.0  NaN  NaN NaN NaN NaN

这并没有那么漂亮,但是如果我们需要为每一行进行不同的转换,可以允许更精细的定制级别,例如,如果一行非空值后跟空值不是真的。

请添加更多的说明语句。不确定您的意思。您能详细说明您想要做什么吗?我添加了一些说明