Разделение значения datetime из текстовой строки с неравной длиной - PullRequest
0 голосов
/ 09 мая 2020

Система: WIN10

IDE: Код MS Visual Studio

Язык: Python версия 3.7. 3

Библиотека: pandas версия 1.0.1

Источник данных: в примере ниже

Набор данных: в примере ниже

Спросите:

Мне нужно разделить строку даты и времени из столбца из фрейма данных, который имеет ряды с неравными разделителями, то есть некоторые с тремя, а некоторые с четырьмя запятыми.

Я пытаюсь понять, как удалить значения даты и времени: 'Nov 11 2013 12:00AM' и 'Apr 11 2013 12:00AM' соответственно с обратной стороны этих две записи в одном столбце в новый столбец, поскольку во второй строке в приведенном ниже примере меньше запятых.

Код:

df['sample field'].head(2) 

4457-I need, this, date, Nov 11 2013 12:00AM ,
2359-I need this, date, Apr 11 2013 12:00AM ,  

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

Код:

df['sample field'].str.split(",", expand=True)

Ответы [ 3 ]

2 голосов
/ 09 мая 2020

Данные

df=pd.DataFrame({'Text':['4457-I need, this, date, Nov 11 2013 12:00AM ,','2359-I need this, date, Apr 11 2013 12:00AM ,']})
df

Использовать df.extract с вытеснением регулярного выражения

df['Date']= df.Text.str.extract('([A-Za-z]+\s+\d+\s+\d+\s+\d+:[0-9A-Z]+(?=\s+\,+))')
df



 #df.Date=pd.to_datetime(df.Date).dt.strftime('%b %d %Y %H:%M%p')
#df['date']  = pd.to_datetime(df['date'] ,format='%b %d %Y %H:%M%p')
    df['Date']=pd.to_datetime(df['Date'])#This or even df['Date']=pd.to_datetime(df['Date'], format=('%b %d %Y %I:%M%p')) could work. Just remmeber because your time is 12AM use 12 clock hour system %I not %H and also hour 00.00 likely to be trncated, If have say11.00AM, the time will appear

enter image description here

1 голос
/ 09 мая 2020

Я буду использовать данные @ wwnde:

df=pd.DataFrame({'Text':['4457-I need, this, date, Nov 11 2013 12:00AM ,','2359-I need this, date, Apr 11 2013 12:00AM ,']})

df['Date'] = df.Text.str.strip(',').str.split(',').str[-1].str.strip()
df['Date_formatted'] = pd.to_datetime(df.Date, format = '%b %d %Y %H:%M%p')

               Text                                     Date              Date_formatted
0   4457-I need, this, date, Nov 11 2013 12:00AM ,  Nov 11 2013 12:00AM 2013-11-11 12:00:00
1   2359-I need this, date, Apr 11 2013 12:00AM ,   Apr 11 2013 12:00AM 2013-04-11 12:00:00
1 голос
/ 09 мая 2020

IIU C вам нужно str.extract с регулярным выражением.

Regex Demo Здесь

print(df)

                                              0
0  4457-I need, this, date, Nov 11 2013 12:00AM
1  2359-I need this, date, Apr 11 2013 12:00AM 

df['date'] = df[0].str.extract('(\w{3}\s\d.*\d{4}\s\d{2}:\d{2}\w{2})')

df['date']  = pd.to_datetime(df['date'] ,format='%b %d %Y %H:%M%p')

print(df)

                                              0                date
0  4457-I need, this, date, Nov 11 2013 12:00AM 2013-11-11 12:00:00
1  2359-I need this, date, Apr 11 2013 12:00AM  2013-04-11 12:00:00
...