Это ожидаемое поведение. Рассмотрим следующую демонстрацию:
CSV-файл:
col1,col2,col3
1,2,3
4,5,6
7,8,9
Демо-версия:
In [179]: pd.read_csv(filename)
Out[179]:
col1 col2 col3
0 1 2 3
1 4 5 6
2 7 8 9
In [180]: pd.read_csv(filename).dtypes
Out[180]:
col1 int64
col2 int64
col3 int64
dtype: object
если вы передадите header=None
- pd.read_csv()
, первая строка будет рассматриваться как данные, а не имена столбцов (заголовок). Очевидно, что строки типа col1
, col2
(имена столбцов) не могут быть преобразованы в числовой тип dtype, поэтому все столбцы будут иметь object
dtype:
In [181]: pd.read_csv(filename, header=None)
Out[181]:
0 1 2
0 col1 col2 col3
1 1 2 3
2 4 5 6
3 7 8 9
In [182]: pd.read_csv(filename, header=None).dtypes
Out[182]:
0 object
1 object
2 object
dtype: object
используя skiprows=1
, вы можете указать пандам игнорировать (пропустить) первый ряд:
In [183]: pd.read_csv(filename, header=None, skiprows=1)
Out[183]:
0 1 2
0 1 2 3
1 4 5 6
2 7 8 9
In [184]: pd.read_csv(filename, header=None, skiprows=1).dtypes
Out[184]:
0 int64
1 int64
2 int64
dtype: object
PS на самом деле вам не нужно игнорировать имена столбцов - большинство алгоритмов машинного обучения принимают панды DataFrames (с именами столбцов). Если вам нужно передать массив Numpy вместо pandas.DataFrame, тогда используйте df.values
In [185]: df = pd.read_csv(filename)
In [186]: df
Out[186]:
col1 col2 col3
0 1 2 3
1 4 5 6
2 7 8 9
In [187]: df.values
Out[187]:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]], dtype=int64)
In [188]: type(df.values)
Out[188]: numpy.ndarray