Как можно безопасно обновить столбец Pandas (после некоторых манипуляций), если значение одной строки отформатировано неправильно? - PullRequest
0 голосов
/ 07 мая 2018

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

def add_delta_to_dataframe():
    df = create_messages_dataframe()

    date = pd.to_datetime(df['Date'], format='%m/%d/%Y', errors="ignore")
    now = datetime.datetime.today()
    try:
        delta = ((date - now).dt.days) + 1
        df['Delta'] = delta
    except TypeError:
        pass

    return df

Я также пытался перебрать:

df['Date'] = pd.to_datetime(df['Date'], format='%m/%d/%Y', errors="ignore")
now = datetime.datetime.today()
for index, row in df.iterrows():
    try:
        delta = ((row['Date'] - now).days) + 1
        df['Delta'] = delta
    except TypeError:
        continue

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

1 Ответ

0 голосов
/ 07 мая 2018

IIUC, вы можете использовать аргумент errors='coerce' pd.to_datetime, который установит для неформатируемых строк значение NaT. Для примера возьмем df:

df = pd.DataFrame({'date':['1999-01-01', 'xyz', '2000-05-05']})

>>> df
         date
0  1999-01-01
1         xyz
2  2000-05-05

Вы можете создать свой timedelta -подобный столбец, используя:

df['my_timedelta'] = pd.to_datetime('today') - pd.to_datetime(df['date'], errors='coerce')

Что приводит к:

>>> df
         date my_timedelta
0  1999-01-01    7066 days
1         xyz          NaT
2  2000-05-05    6576 days
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...