#python #pandas
#питон #панды
Вопрос:
Постановка задачи: назначьте дату (где есть максимальная разница давлений) в строковом формате как «гггг-мм-дд». Убедитесь, что вы заключили его в одинарные кавычки.
test.py файл снабжен вопросом для проверки моей записной книжки. Он доступен только для чтения, и мне не разрешено его редактировать.
test.py
import re
from hashlib import md5
import nbformat
import pickle
def read_ipynb_file(file_path):
with open(file_path) as file:
out = str(nbformat.read(file_path, as_version=4))
return out
path = 'question/EDA_question.ipynb'
out = read_ipynb_file(path)
max_p_range_day = re.findall(r'max_p_range_days*=s*'d*[-,]?d*[-,]?d*'', out)[0].replace(' ', '').replace(' ', '').replace("'", "")
Ошибка:
___________________________ ERROR collecting test.py ___________________________
test.py:23: in <module>
max_p_range_day = re.findall(r'max_p_range_days*=s*'d*[-,]?d*[-,]?d*'', out)[0].replace(' ', '').replace("'", "")
E IndexError: list index out of range
В столбце dataset «День» указаны даты, которые представляют собой строки типа, подобные этому: «23/03/2018».
Мой код:
....
df5=pd.to_datetime(df5['Day']).dt.date # date which has maximum pressure diff
from datetime import datetime
max_p_range_day = datetime.strftime(df5.values[0],"'%Y-%m-%d'")
Это выводит дату в одинарных кавычках, но показывает ошибку, когда test.py оценивает его.
Для проверки себя я попробовал это:
- написал max_p_range_day в файле —
Содержимое файла:
max_p_range_day = '2018-03-23'
- Затем сделал это:
x= открыть («handson_date.txt «,»r»)
out=x.read()
res=re.findall(r’max_p_range_day s *= s * ‘ d *[-,]?d *[-,]?d *», out)[0].заменить (‘ ‘, «).заменить («‘», «»)
Ошибки не было никакой. res показал ‘max_p_range_day=2018-03-23’.
Но когда мой код тестируется с помощью test.py выдается сообщение об ошибке.
Пожалуйста, подскажите, как решить эту проблему.
Комментарии:
1. В test.py , каков вывод «out»? Вы его распечатали?
2. вероятно
re.findall
, ничего не возвращает. если вы индексируете пустой список, например:l=[]
иl[0]
вы получаете ту же ошибку
Ответ №1:
Этот вопрос требует, чтобы каждая переменная была распечатана в ячейке. Например, после получения значения max_p_range_day
, распечатайте его как print("max_p_range_day = '2018-03-23'")
, а затем запустите ячейку, чтобы распечатать выходные данные. Выполнив это для каждой переменной, запустите только test.py .
Этот вопрос проверяет не значение в переменной, а то, что напечатано в каждой ячейке. Для этого и предназначено это регулярное выражение.
res=re.findall(r'max_p_range_days*=s*'d*[-,]?d*[-,]?d*'', out)[0].replace(' ', '').replace("'", "")
Надеюсь, вы найдете это полезным.
Ответ №2:
Измените свой код следующим образом
re.findall(r"max_p_range_days*=s*'d*[-]d*[-]d*'",out)[0].replace(' ', '').replace("'", "")
Это будет работать с вами