Остановить pandas от группировки данных при чтении csv - PullRequest
0 голосов
/ 29 мая 2020

У меня проблема, когда я читаю csv-файл с pandas и назначаю ему заголовок строки 0 со следующим:

df = pd.read_csv(fileName, header = [0])

Первые x столбцов в каждой строке группируются и заключен в круглые скобки. Например, если у меня есть следующее:

Version, temp, altitude, oxygen, pressure, gas_temp, NH3, NO2
1,189,2980,489.9,594,345,345,22,00
2,11,33,423,554.9,2345,32,22,01

Когда я пытаюсь распечатать каждую строку из фрейма данных, я получаю следующее:

(1,189,2980,489.9,594) 345 345 22 00
(2,11,33,423,554.9) 2345 32 22 01

И если я вызываю df['temp'] Я возвращаю [345, 2345], что неверно, потому что pandas группирует вместе первые x столбцов.

1 Ответ

0 голосов
/ 29 мая 2020

Первое важное несоответствие в вашем образце данных заключается в том, что он:

  • содержит только 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])

, чтобы явно указать, что начальный столбец является индексом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...