Проблема чтения переменных заголовков столбцов с помощью панд - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть скрипт Python, который извлекает данные из файла CSV для обработки. Данные, с которыми я работаю, выглядят примерно так

Time.     Col1.     Col2.     Col3.     Important
 0.1       .02       .03       .02      .02
 0.2.      .03       .03       .02      .03 

Сценарий извлекает столбцы Время и Важное для обработки. Когда присутствуют все столбцы, скрипт работает нормально, используя

# specify the row headers seven lines down the file
    names = ['Time (s)', 'Col1', 'Col2', 'Col3', 'Important']
    df = pd.read_csv(fle,
                     delim_whitespace=True,
                     error_bad_lines=False,
                     encoding='utf-8',
                     names=names,
                     skiprows=7)

Моя проблема в том, что при создании файла пользователь может отклонить определенные столбцы, то есть я могу получить столбец меньше.

Time.     Col1.    Col3.     Important
 0.1       .02       .03       .02
 0.2.      .03       .03       .03 

Но поскольку в моем списке «имен» есть все заголовки, которые могут быть в файле, скрипт не распознает заголовки столбцов и не обрабатывает эти файлы. (это не приводит к ошибке, только получающиеся графики являются пустыми, как будто нет данных).

Этот сценарий выполняет итерацию по папке из примерно 50 файлов, которые имеют от 3 до 9 столбцов, но два из них всегда имеют значение Время и Важность.

Есть ли способ сообщить пандам, что некоторые или все заголовки столбцов в списке «имен» могут присутствовать?

Я попытался просто сократить «имена» до «Время» и «Важно», но позже в коде возникает ошибка, когда мне приходится индексировать определенные позиции столбца «Время».

Traceback (most recent call last):
  File "...inter-through-filesv2.py", line 55, in <module>
    loop_start = df[df['Time (s)'] == start].index.item()
  File     "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pandas/core/base.py", line 719, in item
    return self.values.item()
ValueError: can only convert an array of size 1 to a Python scalar

1 Ответ

0 голосов
/ 05 сентября 2018

Есть ли способ сказать пандам, что не все заголовки столбцов в список имен может присутствовать?

Вы можете просто пропустить параметр names:

df = pd.read_csv(fle, delim_whitespace=True, error_bad_lines=False,
                 encoding='utf-8', skiprows=7)

Затем присвойте имена столбцов на следующем шаге:

n = len(df.columns)
df.columns = ['Time (s)'] + [f'Col{i}' for i in range(1, n-1)] + ['Important']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...