Ошибка ключа при разборе CSV-файла

#pandas #csv #parsing #keyerror

#pandas #csv #синтаксический анализ #ошибка ключа

Вопрос:

 mtu,dap
06.01.2015 00:00 - 06.01.2015 01:00,36.90
  

Я пытаюсь преобразовать данные, разделенные запятыми, с рисунка выше в pandas для дальнейшего анализа с помощью следующего фрагмента кода:

 import pandas as pd

DAP = pd.read_csv('xx.csv', 
    index_col = 'mtu',
    sep = ',',
    encoding="utf-8-sig")
#DAP = DAP.set_index('mtu')
date_time = DAP['mtu']
Hourly_DAP = DAP['dap']
  

Однако он продолжает выдавать мне следующую ошибку, с включенным set_index и с index_col, пробовал другие решения, которые можно найти в Интернете, но, похоже, ни одно из них не решает эту проблему:

 KeyError: 'mtu'
  

Сможет ли кто-нибудь решить эту проблему?

Я обновил код в соответствии с повторяющимся вопросом на следующий, однако теперь я получаю ошибку NameError, указывающую, что индекс не определен. Ответ на повторяющийся вопрос очень краткий, поэтому не могу в нем разобраться. Обновленный код выглядит следующим образом, может ли кто-нибудь исправить ошибку?:

 import pandas as pd

DAP = pd.read_csv('xx.csv',
                  sep = ',',
                  encoding="utf-8-sig")

DAP = DAP.set_index('mtu','dap')
print(DAP.index)
index(['mtu', 'dap'], dtype='object', name='TweetID')
  

Комментарии:

1. Вероятно, есть пробелы, которые вы не учитываете. Я предлагаю вам скопировать и вставить свои данные сюда в виде блока кода, а не ссылки на изображение.

2. Обновление: добавлен пример в коде файла csv, он не позволяет мне копировать мои данные в блок кода, если я копирую данные из файла csv, они отображаются в виде изображения.

Ответ №1:

Как только вы превращаете столбец в индекс, он больше не является столбцом, поэтому вам приходится обращаться к нему по индексу. Попробуйте выполнить операции

 date_time = DAP['mtu']
Hourly_DAP = DAP['dap']
  

перед установкой любого столбца индекса, ни при чтении файла

 DAP = pd.read_csv('xx.csv', 
    #index_col = 'mtu',
    sep = ',',
    encoding="utf-8-sig")
  

или после него

 #DAP = DAP.set_index('mtu','dap')
  

Комментарии:

1. Извините, я не понимаю, что вы советуете мне делать. Не могли бы вы немного подробнее описать шаги, которые я должен предпринять?

2. Вы должны выполнить строки date_time=… перед установкой столбца mtu в качестве индекса. Удалите аргумент index_col при чтении csv, и он должен сработать.

3. Это сработало, однако выдает уведомление о том, что DAP не определен ранее (что правильно, поскольку оно определено впоследствии). Установка индекса по-прежнему не работает, что не так, когда вы размещаете это после чтения файла: dap.set_index=dap[‘datetime’]

4. Приведите пример CSV-файла, скажите мне, что вы хотите, и я закодирую и хорошо объясню это. Однако не забудьте оценить ответ, если он вам помог.

Ответ №2:

Это то, на что я потратил свой день, defo даст вам хороший отзыв, если вы сможете помочь. Я чувствую себя новичком, но должен с чего-то начать. В любом случае спасибо за вашу помощь!

 af = act_freq['actual_freq']
datetime = act_freq['datetime']
act_freq = pd.read_csv('xx.csv',
                  sep = ',',
                  encoding="utf-8-sig")
act_freq['datetime'] =  pd.to_datetime(act_freq['datetime'], 
        infer_datetime_format=True)

act_freq.set_index=act_freq['datetime']
grid_freq_des = 50
  

Следующая функция дала мне то, что я хотел, однако я хотел бы сделать это для всего файла

 print(sum(abs(grid_freq_des-(af.head(150)))))
  

Итак, я потратил свой день на настройку такого sth, который я не могу заставить работать (

   for af in range (act_freq['actual_frequency']):
        freq_dev = grid_freq_des - af
        print(sum(freq_dev))
  

Итак, подводя итог, я не могу установить datetime в качестве индекса (python продолжает указывать свой собственный индекс), и я хотел бы настроить функцию (в данном случае freq_dev) для повторения значений ‘actual_freq’ в csv:

                   datetime  actual_freq
0      2019-01-01 00:00:00       50.038
1      2019-01-01 00:00:10       50.021
2      2019-01-01 00:00:20       50.013
3      2019-01-01 00:00:30       50.004
  

Комментарии:

1. Исправлена функция, но не удалось правильно установить индекс