转换pandas数据结构格式中的日期

时间:2016-11-21 20:21:34

标签: python arrays datetime pandas format

所以我用pandas打开了.csv格式的数据。我现在想将日期从当前的dd / mm / YYYY hh:mm:ss格式重新格式化为纯粹的YYYY-mm-dd格式,例如,从19/11/2014 15:26:13到2014-11- 19。我将如何在pandas数据数组中执行此操作?即转换自:

          Id  User Id           Start Time             End Time  Climb Time
0      74618    27366  19/11/2014 15:26:13  19/11/2014 15:26:18           5   
1      74632    27366  19/11/2014 15:26:18  19/11/2014 15:42:26         968   
2      74633    27366  19/11/2014 15:42:26  19/11/2014 15:42:48          22

对此:

          Id  User Id  Start Time    End Time  Climb Time
0      74618    27366  2014-11-19  2014-11-19           5   
1      74632    27366  2014-11-19  2014-11-19         968   
2      74633    27366  2014-11-19  2014-11-19          22

我已经尝试了另一种pandas就绪方法,但似乎没有一种方法可以工作或识别初始数据。我想知道是否有人知道任何可以实现这一目标的方法......

2 个答案:

答案 0 :(得分:1)

试试这个:

pd.to_datetime(df['Start Time']).dt.date

或者如果您希望列类型为字符串:

pd.to_datetime(df.StartTime).dt.strftime('%Y-%m-%d')

答案 1 :(得分:1)

让我试一试,看看它是不是你要找的东西。

输入CSV就像这样(我在本例中称之为test.csv)

Id,User Id,Start Time,End Time,Climb Time
74618,27366,19/11/2014 15:26:13,19/11/2014 15:26:18,5   
74632,27366,19/11/2014 15:26:18,19/11/2014 15:42:26,968   
74633,27366,19/11/2014 15:42:26,19/11/2014 15:42:48,22

现在来自iPython的一些输入/输出。

In [1]: import pandas as pd

In [2]: df = pd.read_csv('test.csv')

我们可以看一下转换到日期时间。注意我们最后得到的“类型”。

In [5]: pd.to_datetime(df['Start Time'])
Out[5]: 
0   2014-11-19 15:26:13
1   2014-11-19 15:26:18
2   2014-11-19 15:42:26
Name: Start Time, dtype: datetime64[ns]

现在您可以将其保存回新列。在获取日期和时间部分方面,to_datetime非常聪明。如果日期错误,您可以使用format key-word

指定输入日期时间的格式
df['start_dt'] = pd.to_datetime(df['Start Time'])

最后,您可以检查数据框中列的dtypes:

In [9]: df.dtypes
Out[9]: 
Id                     int64
User Id                int64
Start Time            object
End Time              object
Climb Time             int64
start_dt      datetime64[ns]
dtype: object

现在这个新列,它是一个日期时间对象,您可以以任何方式显示或排序它。从您的OP,似乎您只想获得日期部分。这很简单,你可以这样做(来自this post

In [10]: df['start_dt'].dt.date
Out[10]: 
0    2014-11-19
1    2014-11-19
2    2014-11-19
Name: start_dt, dtype: object

现在我们可以将所有这些放在一起并进行转换,然后将其作为日期放在一行中。看来你想要回收列名,所以我在这里做,但没有必要。您可以为“新”列指定任何名称。

In [13]: df['Start Time'] = pd.to_datetime(df['Start Time']).dt.date

In [14]: df['End Time'] = pd.to_datetime(df['End Time']).dt.date

In [15]: df
Out[15]: 
      Id  User Id  Start Time    End Time  Climb Time    start_dt
0  74618    27366  2014-11-19  2014-11-19           5  2014-11-19
1  74632    27366  2014-11-19  2014-11-19         968  2014-11-19
2  74633    27366  2014-11-19  2014-11-19          22  2014-11-19

我认为结果就是你要找的东西。