从长度不均匀的文本字符串中拆分日期时间值
Splitting datetime value out of text string with uneven length
系统:WIN10
IDE: MS Visual Studio COde
语言: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)
IIUC 你需要 str.extract
正则表达式。
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
数据
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
我将使用@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
系统:WIN10
IDE: MS Visual Studio COde
语言: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)
IIUC 你需要 str.extract
正则表达式。
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
数据
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
我将使用@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