Скрипт для исправления поврежденных значений даты - PullRequest
0 голосов
/ 12 апреля 2020

мой информационный фрейм содержит множество неправильных значений даты и времени, которые были обмануты людьми, которые вводили эти данные. Ошибки в основном 2019-11-12 были введены в 0019-12-12 и 2018 введены как 0018. Их так много, поэтому я хочу придумать сценарий, чтобы исправить их в массовом порядке. Я использовал следующий код:

df['A'].loc[df.A.dt.year<100]=df.A.dt.year+2000

По сути, я хочу сказать python, чтобы определить любой из лет меньше 100, а затем добавить 2000 к году. Тем не менее, я получаю сообщение об ошибке: «Превышение временной границы наносекунды: 19-11-19 00:00:00» Есть ли какое-либо решение моей проблемы? Спасибо

Ответы [ 2 ]

1 голос
/ 12 апреля 2020

Это связано с ограничениями временных меток: см. Эту публикацию о за пределами наносекундной временной отметки .

Поэтому я предлагаю исправить столбец как строку перед тем, как превратить его в столбец даты и времени, следующим образом:

import pandas as pd
import re
df = pd.DataFrame({"A": ["2019-10-04", "0019-04-02", "0018-06-08", "2018-07-08"]})

# I look for every date starting with zero and another number and replace by 20
r = re.compile(r"^0[0-9]{1}")
df["A"] = df["A"].apply(lambda x: r.sub('20', x))
# then I transform to datetime
df["A"] = pd.to_datetime(df["A"], format='%Y-%m-%d')
df

Вот результат

          A
0 2019-10-04
1 2019-04-02
2 2018-06-08
3 2018-07-08

Вы перед тем, как применить это, нужно убедиться, что у вас могут быть только даты в 20XX (где X - любое число), а не даты в 19XX или других.

0 голосов
/ 12 апреля 2020

Вариант будет экспортировать в CSV. Затем внесите изменения и импортируйте снова.

    df.to_csv('path/csvfile.csv')

    text = open("path/csvfile.csv", "r")
    text = ''.join([i for i in text]) \
        .replace("0019-", "2019-")
    x = open("path/newcsv.csv","w")
    x.writelines(text)
    x.close()

    df_new = pd.read_csv("path/newcsv.csv")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...