#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. Исправлена функция, но не удалось правильно установить индекс