1900-01-01的日期被添加到我的时间'使用df后['时间'] = pd.to_datetime(phData ['时间'],格式='%H:%M:%S')

时间:2017-07-19 19:56:27

标签: python pandas datetime

我是一名自学成才的编码员(大约一年,所以很新)。这是我的数据

phData = pd.read_excel('phone call log & duration.xlsx')
called from called to   Date    Time    Duration in (sec)
0   7722078014  7722012013  2017-07-01  10:00:00    303
1   7722078014  7722052018  2017-07-01  10:21:00    502
2   7722078014  7450120521  2017-07-01  10:23:00    56

The dtypes are:
called from                   int64
called to                     int64
Date                 datetime64[ns]
Time                         object
Duration in (sec)             int64
dtype: object

phData['Time'] = pd.to_datetime(phData['Time'], format='%H:%M:%S')


phData.head(2)

called from called to   Date    Time    Duration in (sec)
0   7722078014  7722012013  2017-07-01  1900-01-01 10:00:00 303
1   7722078014  7722052018  2017-07-01  1900-01-01 10:21:00 502

我设法改变了时间'到datetime64 [ns]但不知何故日期已被添加?从哪里我不知道?我希望能够使用我很高兴做的Pandas来分析DateTime。探索日期和时间,频率等之间的通话。我想我也能保存它以便它可以在Orange3中运行。但Orange3不会将时间视为一种时间格式。我已经尝试剥离1900-01-01,但得到一个错误,说它只能在一个对象时完成。我认为时间不是datetime而是datetime.time ???而且我不确定为什么这很重要,以及如何简单地拥有2 columns一个Date和另一个Time,Pandas会认出我的。我查看过无数帖子以及我发现如何使用pd.to_datetime的帖子,我的问题可能是datetime.time,但我在此之后就陷入了困境。

1 个答案:

答案 0 :(得分:1)

熊猫没有像时间这样的dtype。您可以拥有datetimetimedelta dtype。

选项1 :将日期和时间合并为单列:

In [23]: df['TimeStamp'] = pd.to_datetime(df.pop('Date') + ' ' + df.pop('Time'))

In [24]: df
Out[24]:
   called from   called to  Duration in (sec)           TimeStamp
0   7722078014  7722012013                303 2017-07-01 10:00:00
1   7722078014  7722052018                502 2017-07-01 10:21:00
2   7722078014  7450120521                 56 2017-07-01 10:23:00

选项2 :将Date转换为datetime,将Time转换为timedelta dtype:

In [27]: df.Date = pd.to_datetime(df.Date)

In [28]: df.Time = pd.to_timedelta(df.Time)

In [29]: df
Out[29]:
   called from   called to       Date     Time  Duration in (sec)
0   7722078014  7722012013 2017-07-01 10:00:00                303
1   7722078014  7722052018 2017-07-01 10:21:00                502
2   7722078014  7450120521 2017-07-01 10:23:00                 56

In [30]: df.dtypes
Out[30]:
called from                    int64
called to                      int64
Date                  datetime64[ns]
Time                 timedelta64[ns]
Duration in (sec)              int64
dtype: object