Python 日期和时间列具有混合格式
我在确定日期和时间时遇到了一些问题。 我有一个包含日期和时间的数据文件。 下面是代表我的部分数据的示例日期Python 日期和时间列具有混合格式,python,pandas,datetime,Python,Pandas,Datetime,我在确定日期和时间时遇到了一些问题。 我有一个包含日期和时间的数据文件。 下面是代表我的部分数据的示例日期 data = pd.DataFrame() data['Date'] = ['01 Jul 2014 - Qualification','30 Sep 2014 - Group Stage','17 Mar 2015 - Play Offs',' 19:00:00'] data ['ID'] = [1,2,3,4] 我创建了一个新列,并尝试使用datetime设置格式,如下所示: dat
data = pd.DataFrame()
data['Date'] = ['01 Jul 2014 - Qualification','30 Sep 2014 - Group Stage','17 Mar 2015 - Play Offs',' 19:00:00']
data ['ID'] = [1,2,3,4]
我创建了一个新列,并尝试使用datetime设置格式,如下所示:
data['date1'] = pd.to_datetime(data.Date,errors = 'coerce')
我在约会时间里得到了所有的NaT。
我还想创建两个新列,如时间列和阶段,以表示时间和游戏阶段
我可以知道如何处理这个问题吗
谢谢
Zep日期列中的文本不仅仅是日期/时间。无法将其转换为datetime对象。您需要将文本的日期/时间部分与其余部分隔离开来。为此,您可以在
-
上拆分并展开,以在临时数据框df_temp
的单独列中获取阶段文本和日期,然后使用这些列在现有数据框中分配和创建:
In [27]: df_temp = data['Date'].str.split('-', expand=True)
In [28]: data['date1'] = df_temp[0]
In [29]: data['stage'] = df_temp[1]
In [30]: data
Out[30]:
Date ID date1 stage
0 01 Jul 2014 - Qualification 1 01 Jul 2014 Qualification
1 30 Sep 2014 - Group Stage 2 30 Sep 2014 Group Stage
2 17 Mar 2015 - Play Offs 3 17 Mar 2015 Play Offs
3 19:00:00 4 19:00:00 None
In [31]: data['date1'] = pd.to_datetime(data.date1,errors = 'coerce')
In [32]: data
Out[32]:
Date ID date1 stage
0 01 Jul 2014 - Qualification 1 2014-07-01 Qualification
1 30 Sep 2014 - Group Stage 2 2014-09-30 Group Stage
2 17 Mar 2015 - Play Offs 3 2015-03-17 Play Offs
3 19:00:00 4 NaT None
Date
列中的文本不仅仅是日期/时间。无法将其转换为datetime对象。您需要将文本的日期/时间部分与其余部分隔离开来。为此,您可以在-
上拆分并展开,以在临时数据框df_temp
的单独列中获取阶段文本和日期,然后使用这些列在现有数据框中分配和创建:
In [27]: df_temp = data['Date'].str.split('-', expand=True)
In [28]: data['date1'] = df_temp[0]
In [29]: data['stage'] = df_temp[1]
In [30]: data
Out[30]:
Date ID date1 stage
0 01 Jul 2014 - Qualification 1 01 Jul 2014 Qualification
1 30 Sep 2014 - Group Stage 2 30 Sep 2014 Group Stage
2 17 Mar 2015 - Play Offs 3 17 Mar 2015 Play Offs
3 19:00:00 4 19:00:00 None
In [31]: data['date1'] = pd.to_datetime(data.date1,errors = 'coerce')
In [32]: data
Out[32]:
Date ID date1 stage
0 01 Jul 2014 - Qualification 1 2014-07-01 Qualification
1 30 Sep 2014 - Group Stage 2 2014-09-30 Group Stage
2 17 Mar 2015 - Play Offs 3 2015-03-17 Play Offs
3 19:00:00 4 NaT None
您可以在此处将正则表达式用于:
您可以在此处将正则表达式用于:
你能发布示例输出吗…你到底想要什么!!你能发布示例输出吗…你到底想要什么!!你好,amanb,谢谢你的及时回复,很抱歉我延迟回复。时间栏怎么样?我想创建一个表示时间的新列。您可以像其他列一样创建新列,但我在现有列中都找不到特定于时间的信息。如果您有例如的时间数据列表,那么只需执行
df['time']=#time data
Hi amanb,感谢您的及时回复,并对我的回复延迟表示抱歉。时间栏怎么样?我想创建一个表示时间的新列。您可以像其他列一样创建新列,但我在现有列中都找不到特定于时间的信息。如果您有时间数据作为示例列表,那么只需执行df['time']=#time data
Hi Jez,非常感谢您对我的查询的及时回复。很抱歉延迟回复。游戏阶段和时间栏怎么样?谢谢你,非常感谢你对我的问题的及时回复。很抱歉延迟回复。游戏阶段和时间栏怎么样?谢谢
#https://stackoverflow.com/a/46069885
pat = r'((?:\d{,2}\s)?(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]*(?:-|\.|\s|,)\s?\d{,2}[a-z]*(?:-|,|\s)?\s?\d{2,4})'
s = data['Date'].str.extract(pat, expand=False)
data['date1'] = pd.to_datetime(s, errors = 'coerce')
print (data)
Date ID date1
0 01 Jul 2014 - Qualification 1 2014-07-01
1 30 Sep 2014 - Group Stage 2 2014-09-30
2 17 Mar 2015 - Play Offs 3 2015-03-17
3 19:00:00 4 NaT