Кто-нибудь знает регулярное выражение Python для анализа от 2 di git year до 4 di git, например, с 77 по 1977 и с 04 по 2004? - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь разобрать структуру 2 di git year в структуру 4 di git в Python, используя Pandas. Следующее - моя попытка.

df.Year=re.sub("\s+", "19", df.Year)

и множество других попыток на этом этапе. Кто-нибудь может мне помочь в достижении этого решения? Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 18 апреля 2020

Regex - это не решение всех проблем. Преобразуйте столбец Year в целое число и выберите точку отсечения, скажем, 49 => 2049, 50 => 1950:

df = pd.DataFrame({
    'Year': [f'{i:02d}' for i in range(100)]
})

y = df['Year'].astype('int')
df['Year'] = y + np.where(y < 50, 2000, 1900)
0 голосов
/ 18 апреля 2020

Вы можете использовать

df['Year'] = df['Year'].astype(str).str.replace(r'\b\d{2}\b',
  lambda x: '20{}'.format(x.group()) if int(x.group()) < 21 else '19{}'.format(x.group()))

С интерполяцией строк:

df['Year'] = df['Year'].astype(str).str.replace(r'\b\d{2}\b',
  lambda x: f'20{x.group()}' if int(x.group()) < 21 else f'19{x.group()}')

Шаблон \b\d{2}\b соответствует двум цифрам, не предшествующим и не сопровождаемым символами (буквы, цифры или * 1008). *) и объект данных о совпадении передается в лямбду, где логика c имеет следующий вид: если совпадающие две цифры меньше 21, значение совпадения добавляется к 20 и возвращается как дата XXI века, в противном случае значение совпадения добавляется к 19 в качестве даты XX века.

Pandas тест:

df = pd.DataFrame({'Year': ['Text:21', 'More-78', 'Now:19']})
df['Year'] = df142['Year'].astype(str).str.replace(r'\b\d{2}\b',
    lambda x: '20{}'.format(x.group()) if int(x.group()) < 21 else '19{}'.format(x.group()))
df
# =>
#    0  Text:1921
#    1  More-1978
#    2   Now:2019
0 голосов
/ 18 апреля 2020

Я согласен с Always Sunny и Błotosmętek, однако, если вы уверены, что год может быть только в 21 веке, я бы попробовал datetime.strptime()

Пример:

from datetime import datetime
time = datetime.strptime("19", "%y")
print(time)

Вывод:

2019-01-01 00:00:00

Подробнее о strptime и strftime можно прочитать здесь: https://docs.python.org/3/library/datetime.html#strftime -strptime-поведения

...