Панды предполагает индекс
Это по замыслу. Первый «столбец» обрабатывается как index и поэтому не нуждается в названии. Чтобы понять это, вы должны оценить, что каждый фрейм данных должен иметь индекс, независимо от того, указан он явно или нет. Например, обратите внимание на значения 0, 1, 2
по левому краю:
import pandas as pd, numpy as np
df = pd.DataFrame(np.random.random((3, 5)))
print(df)
0 1 2 3 4
0 0.244763 0.994879 0.085906 0.330168 0.269433
1 0.849739 0.631897 0.372024 0.413401 0.866026
2 0.183609 0.316389 0.213718 0.707552 0.033736
Доступ к индексу
Вы можете напрямую получить доступ к индексу, который в данном случае является pd.RangeIndex
:
print(df.index)
RangeIndex(start=0, stop=3, step=1)
print(df.index.values)
array([0, 1, 2], dtype=int64)
Явный тест
Вы можете явно проверить, совпадают ли метки ваших столбцов с вашими данными:
def check_csv(file_in):
col_count = pd.read_csv(x, nrows=0, header=None).shape[1] # 5
data_count = pd.read_csv(x, skiprows=[0], nrows=0, header=None).shape[1] # 6
return col_count == data_count
assert check_csv('file.csv'), 'Dataframe is malformed, check column labels versus data!'
Оператор assert
будет вызывать AssertionError
, когда ваш CSV-файл искажен.