使用 numpy 处理缺失数据以集中不同形状的数组

Handling missing data with numpy to concentrate different shape arrays

所以我决定更深入地了解 numpy,但我的原始数据来自数据框,现在假设这是数据框:

df = pd.DataFrame({
'col1': [101, 200, 306, 402, 500, 600],
'col2': [100, 200, 300, 400, 500, 600]})

我想执行一些基于列的基本计算,然后以相同的顺序保存在一个 numpy 数组中,所以我将它变成一个 numpy 二维数组,如下所示:

arr = np.array(df['col1'] - df['col2']).reshape((-1, 1))
    # out
[[1]
 [0]
 [6]
 [2]
 [0]
 [0]]

但是假设我的数据帧更新并且 col1 的值变为 col2 因此新值被添加到 col1 并且零被添加到 col2如果该值之前不存在:

df = pd.DataFrame({
'col1': [103, 220, 316, 406, 501, 606, 348],
'col2': [101, 200, 306, 402, 500, 600, 0]})

所以现在我有 7 个值而不是 6 个值,这是复杂性开始的地方,因为我也想计算这个差异并将它按照它在数组中的顺序追加,所以我尝试这样做:

arr1 = np.array(df['col1'] - df['col2']).reshape((-1, 1))
arr = np.append(arr, np.zeros((len(arr1 - arr), arr.shape[0])), axis=1)

为了填充缺失值并允许集中两个数组,但它抛出 一个:ValueError: operands could not be broadcast together with shapes (7,1) (6,1)

感谢任何帮助!

完整代码和预期输出

df = pd.DataFrame({
'col1': [101, 200, 306, 402, 500, 600],
'col2': [100, 200, 300, 400, 500, 600]})

arr = np.array(df['col1'] - df['col2']).reshape((-1, 1))

df = pd.DataFrame({
'col1': [103, 220, 316, 406, 501, 606, 348],
'col2': [101, 200, 306, 402, 500, 600, 0]})

arr1 = np.array(df['col1'] - df['col2']).reshape((-1, 1))

arr = np.append(arr, np.zeros((len(arr1 - arr), arr.shape[1])), axis=0)

arr = np.concatenate((arr, arr1), axis=1)

##EXPECTED##

[[1   2]
 [0  20]
 [6  10]
 [2   4]
 [0   1]
 [0   6]
 [0 348]]

试试这个而不是 np.append -

  1. 创建np.zeros((difference in shape[0], arr.shape[1]))
  2. np.vstack arr 和 zeros
  3. 连接 arr, arr1
arr = np.vstack([arr, np.zeros((arr1.shape[0] - arr.shape[0], arr.shape[1]))]) #<--------

arr = np.concatenate((arr, arr1), axis=1)

print(arr)
# [[1   2]
#  [0  20]
#  [6  10]
#  [2   4]
#  [0   1]
#  [0   6]
#  [0 348]]