Python 3.x 将pandas数据帧中的最后2个数值逐行替换为NAN';s
我的数据中每一行的最后两个实数是用误差测量的。我想用np.NAN来代替它们。实数的数量因行而异(即,每行已经有一些不同数量的NAN)。列标题表示测量值,索引为实验性试验。单元格中的值等于测量读数。一些试验比其他试验有更多的测量读数;因此,某些行比其他行具有更多的NAN。下面的代码创建了一个类似于我的数据帧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,
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
这并没有那么漂亮,但是如果我们需要为每一行进行不同的转换,可以允许更精细的定制级别,例如,如果一行非空值后跟空值不是真的。请添加更多的说明语句。不确定您的意思。您能详细说明您想要做什么吗?我添加了一些说明