если записать вывод как NaT в pandas, пропустить запись

#python #excel #pandas #selenium

#python #excel #pandas #selenium

Вопрос:

У меня есть несколько записей, выводимых в моем фрейме данных pandas как NaT .

т. е. Date_Refused_Final_Something_of_ICP=NaT,

И, похоже, это нарушает работу моего скрипта. Я бы просто хотел пропустить эти несколько записей, найденных как Nat, и продолжить с остальными записями / сценарием.

Ниже приведен полный соответствующий код:

 def get_excel_data(self):
    """Places excel data into pandas dataframe"""
    excel_data = pandas.read_excel(self.find_file())

    columns = pandas.DataFrame(columns=excel_data.columns.tolist())
    excel_data = pandas.concat([excel_data, columns])

    excel_data.columns = excel_data.columns.str.strip()
    excel_data.columns = excel_data.columns.str.replace("/", "_")
    excel_data.columns = excel_data.columns.str.replace(" ", "_")

    num_valid_records = 0

    for row in excel_data.itertuples():
        mrn = row.MRN

        if mrn in ("", " ", "N/A", None) or math.isnan(mrn):
            print(f"Invalid record: {row}")
            excel_data = excel_data.drop(excel_data.index[row.Index])
        else:
            num_valid_records  = 1

    print(f"Processing #{num_valid_records} records")

    return self.clean_data_frame(excel_data)

def clean_data_frame(self, data_frame):
    """Cleans up dataframes"""
    for col in data_frame.columns:
        if "date" in col.lower():
            data_frame[col] = pandas.to_datetime(data_frame[col],
                                                 errors='coerce', infer_datetime_format=True)
            data_frame[col] = data_frame[col].dt.date
    data_frame['MRN'] = data_frame['MRN'].astype(int).astype(str)

    return data_frame

def get_mapping_data(self):
    map_data = pandas.read_excel(config.MAPPING_DOC, sheet_name='main')
    columns = pandas.DataFrame(columns=map_data.columns.tolist())
    return pandas.concat([map_data, columns])
  

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

1. Где в ваших циклах это будет найдено NaT ?

Ответ №1:

Я не уверен, где вы сталкиваетесь с этим, но вы можете просто поставить continue , когда он найдет это:

 if mrn in ("", " ", "N/A", None) or math.isnan(mrn):
            print(f"Invalid record: {row}")
            continue  # <--- if it encounters any of the conditions above, it skips and goes to the next row in your excel_data
  

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

1. Вау, вау; что, если я не хочу пропускать всю строку, если она встречается; а скорее только ячейку!?

2. попробуйте изменить continue на pass . Я не уверен, вызовет ли это ошибку в дальнейшем коде. Я предполагаю, что тогда мой вопрос будет заключаться в том, что если вы помещаете это во фрейм данных, в этой ячейке должно быть какое-то значение. Думаю, у меня просто возникли проблемы, поскольку я не знаю, как выглядит ваш входной файл Excel и как вы хотите, чтобы выглядел ваш выходной фрейм данных. Возможно ли поделиться этим?