Если вы начнете с фрейма данных
In [98]: df
Out[98]:
a b c d
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
и выберете столбец по имени, вы получите серию:
In [99]: df.a # df['a']
Out[99]:
0 0
1 4
2 8
Name: a, dtype: int64
In [100]: type(_)
Out[100]: pandas.core.series.Series
* to_numpy
серии - это массив 1d :
In [101]: df.a.to_numpy()
Out[101]: array([0, 4, 8])
In [102]: _.shape
Out[102]: (3,)
Но вы взяли серию и превратили ее обратно в информационный кадр:
In [103]: y = pd.DataFrame([df.a])
In [104]: y
Out[104]:
0 1 2
a 0 4 8
Было ли это вашим намерением? В любом случае извлеченный массив имеет вид 2d:
In [105]: y.to_numpy()
Out[105]: array([[0, 4, 8]])
In [106]: _.shape
Out[106]: (1, 3)
Мы можем изменить его или сделать «транспонирование»:
In [107]: __.T # reshape(3,1)
Out[107]:
array([[0],
[4],
[8]])
Если мы опускаем [] из y
выражение, мы получаем другой фрейм данных и желаемый массив 'column':
In [109]: pd.DataFrame(df.a)
Out[109]:
a
0 0
1 4
2 8
In [110]: pd.DataFrame(df.a).to_numpy()
Out[110]:
array([[0],
[4],
[8]])
другой вариант - выбрать столбец со списком:
In [111]: df[['a']]
Out[111]:
a
0 0
1 4
2 8
A Series
- это pandas
версия массива 1d numpy
. У него есть индексы строк, но нет столбцов. DataFrame
- это 2d, со строками и столбцами.
Имейте в виду, что массив numpy
может иметь формы (3,), (1,3) и (3,1), все с те же 3 элемента.