Массивы NumPy не подходят для обработки данных с именованными столбцами, которые могут содержать разные типы. Вместо этого я бы использовал pandas
для этого. Например:
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)
В результате получается «dataframe», структура данных, похожая на электронную таблицу. Ноутбуки Jupyter отображают их следующим образом:
Вы можете заметить, что есть дополнительный новый столбец;это «индекс», который можно рассматривать как метки строк. Вам это не нужно, если вы не хотите, чтобы оно было в вашем CSV, но если вы продолжаете делать что-то в кадре данных, вы можете выполнить df = df.reset_index()
, чтобы перемаркировать строки более полезным способом.
Если вы хотите вернуть фрейм данных в виде массива NumPy, вы можете сделать df.values
и все - и все. Хотя у него нет имен столбцов.
Последнее: если вы действительно хотите остаться в NumPy-land, тогда посмотрите структурированные массивы , которые даютВы по-другому именуете столбцы, по сути, в массиве. Честно говоря, с тех пор как pandas
появился, я почти никогда не вижу их в дикой природе.