Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 日期和时间列具有混合格式_Python_Pandas_Datetime - Fatal编程技术网

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