如何将 float64 类型值转换为 datetime 类型值。
这是数据集中的前五个浮点值:
0 41245.0
1 41701.0
2 36361.0
3 36145.0
4 42226.0
Name: product_first_sold_date, dtype: float64
为了将浮点类型转换为日期时间类型值,我写了这样的:
from datetime import datetime
pd.to_datetime(y['product_first_sold_date'], format='%m%d%Y.0', errors='coerce')
但作为输出,我得到了数据集中所有行的“NaT”:
0 NaT
1 NaT
2 NaT
3 NaT
4 NaT
Name: product_first_sold_date, Length: 19273, dtype: datetime64[ns]
那么,这个:
打印(pd.to_datetime(y.product_first_sold_date, infer_datetime_format=True))
但它显示数据集中所有行的相同日期
0 1970-01-01 00:00:00.000041245
1 1970-01-01 00:00:00.000041701
2 1970-01-01 00:00:00.000036361
3 1970-01-01 00:00:00.000036145
4 1970-01-01 00:00:00.000042226
我真的不知道代码出了什么问题?
我也尝试过这个:
pd.to_datetime(pd.Series(g.product_first_sold_date).astype(str), format='%d%m%Y.0')
并将其作为输出,我还更改了格式 = '%Y%m%d.0':
ValueError: time data '41245.0' does not match format '%d%m%Y.0' (match)
看起来没有任何效果,或者可能是我做错了什么,不知道如何解决这个问题。提前致谢!
最佳答案
我假设这些浮点值代表 Excel 内部处理的日期,即自 1900 年 1 月 1 日以来的天数:
要将此格式转换为 Python/pandas 日期时间,您可以通过设置适当的原点和单位来实现:
df['product_first_sold_date'] = pd.to_datetime(df['product_first_sold_date'],
origin='1899-12-30',
unit='D')
...给出了所提供的示例
0 2012-12-02
1 2014-03-03
2 1999-07-20
3 1998-12-16
4 2015-08-10
Name: product_first_sold_date, dtype: datetime64[ns]
此处需要注意的重要一点(请参阅 @chux-ReinstateMonica 的评论)是,1900-01-01 是 Excel 中的第 1 天,而不是第 0 天(您必须提供作为来源)。第 0 天是 1899 年 12 月 30 日;如果你想知道为什么不是 1899-12-31,解释很有趣,你可以找到更多 info here .
关于python - 如何将 float64 值转换为其等效的日期时间格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64064572/