我是一名自学成才的编码员(大约一年,所以很新)。这是我的数据
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来分析Date
和Time
。探索日期和时间,频率等之间的通话。我想我也能保存它以便它可以在Orange3中运行。但Orange3不会将时间视为一种时间格式。我已经尝试剥离1900-01-01
,但得到一个错误,说它只能在一个对象时完成。我认为时间不是datetime
而是datetime.time
???而且我不确定为什么这很重要,以及如何简单地拥有2 columns
一个Date
和另一个Time
,Pandas会认出我的。我查看过无数帖子以及我发现如何使用pd.to_datetime
的帖子,我的问题可能是datetime.time
,但我在此之后就陷入了困境。
答案 0 :(得分:1)
熊猫没有像时间这样的dtype。您可以拥有datetime
或timedelta
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