我是python的初学者,在组合数据方面有一些问题。你知道吗
我要做的是处理我的数据,完全丢弃具有Nan值的列。你知道吗
但是在我的大多数数据中,Nan值的指数是不同的。你知道吗
例如
data1 = np.array([1, 2, np.nan, 4, 5])
data2 = np.array([1, np.nan, 3, 4, 6])
data3 = np.array([np.nan, 2, 3, 4, 7])
ind_1 = np.where(~np.isnan(data1))
ind_2 = np.where(~np.isnan(data2))
ind_3 = np.where(~np.isnan(data3))
-----
data1_out = data1[ind_1[0]] # array([ 1., 2., 4., 5.])
data2_out = data2[ind_2[0]] # array([ 1., 3., 4., 6.])
data3_out = data3[ind_3[0]] # array([ 2., 3., 4., 7.])
但我需要的是
data1_out = array([ 4., 5.])
data2_out = array([ 4., 6.])
data3_out = array([ 4., 7.])
所以我认为组合数组
ind_c = intersection(ind_1, ind_2, ind_3)
data1_out = data1[ind_c[0]]
会解决问题的!你知道吗
它是与其他数据集共享的输出,因此如果一个数据集的索引有Nan值,它会影响其他数据集的所有相同索引。你知道吗
我找不到一个简单的方法。有什么建议吗?你知道吗
将所有阵列合并为二维阵列:
查找非nan列:
选择数据:
有一个非常简单的方法。不要使用
where
来获取数字索引,而要使用由isnan
生成的布尔掩码。遮罩更容易组合,而且在其他方面也更容易使用,更不用说它为每个阵列节省了一步。你知道吗现在,您可以使用简单的布尔运算将掩码合并为一个掩码,并将结果应用于每个数组:
现在,每当你发现自己在使用形状相同的数组,比如
x1
,x2
,x3
,等等,你可能只需要一个额外维度的数组。99%的时候,它会让你的生活更轻松:any
将|
应用于所有元素。np.arange(data.shape[0]).reshape(-1, 1)
创建一个列向量,强制通过广播将1D掩码应用于每一行。你知道吗当然,这种方法的前提是每行中有相等数量的nan。如果不是这样的话,就必须使用单独的数组。你知道吗
相关问题 更多 >
编程相关推荐