import numpy as np
import pandas as pd
import datetime as DT
print(pd.__version__)
# 0.21.0.dev+25.g50e95e0
dates = [DT.date(2017,1,1)+DT.timedelta(days=2*i) for i in range(3)]
df = pd.DataFrame({'dates': dates, 'foo': np.arange(len(dates))})
print(all([isinstance(item, DT.date) for item in df['dates']]))
# True
df['dates'] = (df['dates'] + pd.Timedelta(days=1))
print(all([isinstance(item, DT.date) for item in df['dates']]))
# True
编辑:在pandas 0.21.0或更高版本中,在数据帧中保存python
datetime.date
s是没有问题的。date-like
列不会自动转换为datetime64[ns]
数据类型。在对于旧版熊猫:
有一种方法可以防止Pandas数据帧自动转换 通过为
^{pr2}$datetime64[ns]
分配一个附加值,如 空字符串,它与列的datelike不同。在数据帧之后 格式,可以删除非日期类型的值:显然,将这种恶作剧编程成严肃的代码感觉是完全错误的,因为我们颠覆了开发人员的意图。 与
datetime64[ns]
的列表或对象数组相比,使用datetime64[ns]
还有计算速度上的优势。 此外,如果df[col]
具有数据类型datetime64[ns]
,则df[col].dt.date.values
返回pythondatetime.date
s的对象numy数组:因此,您可以通过将列保留为}s,从而享受这两个世界的最佳效果。在
datetime64[ns]
并在必要时使用df[col].dt.date.values
来获得{另一方面,
datetime64[ns]
和Pythondatetime.date
具有不同的可表示日期范围。在datetime64[ns]
s可以表示来自{a1}的日期时间。在datetime.date
s可以表示从DT.date(0,1,1)
到{如果使用}s的原因是为了克服可表示日期的有限范围,那么a better alternative is to use a ^{} :
datetime.date
s而不是{相关问题 更多 >
编程相关推荐