使用 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
-
- 创建
np.zeros((difference in shape[0], arr.shape[1]))
np.vstack
arr 和 zeros
- 连接 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]]
所以我决定更深入地了解 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
-
- 创建
np.zeros((difference in shape[0], arr.shape[1]))
np.vstack
arr 和 zeros- 连接 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]]