我有2个numpy数组,我将第一行用作列标题。每个数组具有相同的列,但2列除外。 arr2将有一个不同的C列以及一个附加列
如何将所有这些列组合到单个np阵列中?
arr1 = [ ['A', 'B', 'C1'], [1, 1, 0], [0, 1, 1] ]
arr2 = [ ['A', 'B', 'C2', 'C3'], [0, 1, 0, 1], [0, 0, 1, 0] ]
a1 = np.array(arr1)
a2 = np.array(arr2)
b = np.append(a1, a2, axis=0)
print(b)
# Desired Result
# A B C1 C2 C3
# 1 1 0 - -
# 0 1 1 - -
# 0 1 - 0 1
# 0 0 - 1 0
NumPy数组不适用于处理带有命名列的数据,命名列可能包含不同的类型。相反,我将为此使用pandas
。例如:
pandas
这会导致“数据框”,即类似于电子表格的数据结构。 Jupyter Notebook的渲染如下:
import pandas as pd
arr1 = [[1, 1, 0], [0, 1, 1] ]
arr2 = [[0, 1, 0, 1], [0, 0, 1, 0] ]
df1 = pd.DataFrame(arr1, columns=['A', 'B', 'C1'])
df2 = pd.DataFrame(arr2, columns=['A', 'B', 'C2', 'C3'])
df = pd.concat([df1, df2], sort=False)
df.to_csv('mydata.csv', index=False)
您可能会注意到还有一个新的专栏;这是“索引”,您可以将其视为行标签。如果不想在CSV中使用它,则不需要它,但如果继续在数据框中执行操作,则可能需要执行以更有用的方式重新标记行。
如果您希望将数据框作为NumPy数组返回,则可以执行df = df.reset_index()
,然后就不做了。它没有列名。
最后一件事:如果您[确实]想留在NumPy-land,则签出df.values
,这实际上为您提供了一种在数组中命名列的方式。老实说,自从structured arrays出现以来,我几乎没有在野外看到它们。