如何将Pandas数据框列从np.datetime64转换为datetime?

时间:2016-05-20 19:29:06

标签: python datetime pandas

我想将一个Pandas数据框列从datetime放入datetime64格式。这是个人的基础。特别是以下工作正常:

t = dt['time'].values[0]
datetime.utcfromtimestamp(t.astype(int)/1000000000)

但是,当我尝试对整个列进行此操作时

dt['datetime'] = dt['time'].apply(lambda x: datetime.utcfromtimestamp(x.astype(int)/1000000000))

我收到以下错误:

pandas.lib.map_infer中的pandas / src / inference.pyx(pandas / lib.c:62578)()

<ipython-input-26-5950d82979b4> in <lambda>(x)
      1 print(type(dt['time'].values[0]))
      2 
----> 3 dt['datetime'] = dt['time'].apply(lambda x: datetime.utcfromtimestamp(x.astype(int)/1000000000))
      4 t = dt['time'].values[0]
      5 print(t)

AttributeError: 'Timestamp' object has no attribute 'astype'

我做错了什么?如何将我的专栏转换为datetime和/或以datetime格式制作新专栏?

以下是数据框的信息:

info

2 个答案:

答案 0 :(得分:5)

您可以通过调用commit()方法将dtype datetime64[ns]系列转换为NumPy datetime.datetime个对象数组:

.dt.to_pydatetime()

请注意,NDFrame(例如Series和DataFrames)只能将类似日期时间的对象保存为dtype In [75]: df.info() <class 'pandas.core.frame.DataFrame'> RangeIndex: 252 entries, 0 to 251 Data columns (total 1 columns): time 252 non-null datetime64[ns]<--the `time` column has dtype `datetime64[ns]` dtypes: datetime64[ns](1) memory usage: 2.0 KB In [77]: df.head() Out[77]: time 0 2009-01-02 1 2009-01-05 2 2009-01-06 3 2009-01-07 4 2009-01-08 In [76]: df['time'].dt.to_pydatetime()[:5] Out[76]: array([datetime.datetime(2009, 1, 2, 0, 0), datetime.datetime(2009, 1, 5, 0, 0), datetime.datetime(2009, 1, 6, 0, 0), datetime.datetime(2009, 1, 7, 0, 0), datetime.datetime(2009, 1, 8, 0, 0)], dtype=object) 的对象。将所有日期时间自动转换为常见的dtype简化了后续日期计算。但它使得无法在DataFrame列中存储Python datetime64[ns]对象。 Pandas核心开发人员Jeff Reback explains

  

“我们不允许直接转换,因为它过于复杂,无法在内部保留除datetime64 [ns]以外的任何内容(也根本不需要)。”

答案 1 :(得分:0)

如果没有您的数据集,我必须猜测一些事情。但是,你应该能够重复与你所展示的工作相同的东西。

dt['datetime'] = datetime.utcfromtimestamp(dt['time'].values.astype(int)/1000000000))