Первое важное несоответствие в вашем образце данных заключается в том, что он:
- содержит только 8 имена столбцов,
- , но есть 9 столбцов данных.
Еще одна проблема заключается в том, что имена столбцов должны разделяться только запятыми, но ваш ввод также содержит пробелы.
Суммарный эффект вышесказанное состоит в том, что read_csv «обманут» и может читать данные таким странным образом. Фактически, с первой попытки я воспроизвел ваш случай, но в следующий раз (и все последующие разы) я получил очевидно правильный результат.
Причина, по которой я написал «очевидно», заключается в том, что когда вы напечатаете df.columns
, вы увидите еще один недостаток:
Index(['Version', ' temp', ' altitude', ' oxygen', ' pressure', ' gas_temp',
' NH3', ' NO2'],
dtype='object')
т.е. имена столбцов содержат начальные пробелы , поэтому попытка сослаться, например, на temp столбец выбрасывает исключение:
AttributeError: 'DataFrame' object has no attribute 'temp'
Чтобы правильно прочитать этот файл, вы можете передать skipinitialspace = True параметр:
df = pd.read_csv(fileName, skipinitialspace=True, header=[0])
Результат чтения:
Version temp altitude oxygen pressure gas_temp NH3 NO2
1 189 2980 489.9 594.0 345 345 22 0
2 11 33 423.0 554.9 2345 32 22 1
Когда вы напечатаете df.columns
, вы увидите, что имена столбцов без начальных пробелов, поэтому теперь эти лишние пробелы в строке заголовка удалены.
Еще одна деталь в пути как работает read_csv , так это то, что он сопоставляет имена столбцов со столбцами данных с конца , поэтому «дополнительный» столбец (в строках данных) принимается как индекс столбец без имени.
Вы также можете добавить в dex_col = [0] параметр:
df = pd.read_csv(filename, skipinitialspace=True, index_col=[0], header=[0])
, чтобы явно указать, что начальный столбец является индексом.