遍历 Float 时间戳的 Pandas DataFrame 并转换为日期时间

Posted

技术标签:

【中文标题】遍历 Float 时间戳的 Pandas DataFrame 并转换为日期时间【英文标题】:Iterate through a Pandas DataFrame of Float time stamps and convert to date time 【发布时间】:2017-05-18 19:21:10 【问题描述】:

我有一个 Pandas 数据框,其中包含 2000 多行,日期为浮点格式,如下所示:

42704.99686342593代表(2016, 11, 30, 23, 55, 29)的日期时间值

我想要做的是迭代数据帧中的每一行并将浮点数转换为正确的日期时间格式,理想情况下d/m/Y H/M/S 并将其保存到新的数据帧中。

使用 Python 2.7。

我找不到任何重复的问题,也无法通过类似问题的解决方案来解决问题,因此感谢您的帮助。

谢谢。

【问题讨论】:

在您的问题中包含 df.head()。 42704 如何等于 2016 年 11 月 11 日? 【参考方案1】:

您似乎使用serial date Excel 格式。

最简单的方法是减去25569 并使用to_datetime 和参数unit='d'

df =  pd.DataFrame('date':[42704.99686342593,42704.99686342593])
print (df)
           date
0  42704.996863
1  42704.996863

print (pd.to_datetime(df.date - 25569, unit='d'))

0   2016-11-30 23:55:28.963200
1   2016-11-30 23:55:28.963200
Name: date, dtype: datetime64[ns]

另一种解决方案是减去timedeltaoffset

print (pd.to_datetime(df.date, unit='d') - pd.to_timedelta('25569 Days'))
0   2016-11-30 23:55:28.963200
1   2016-11-30 23:55:28.963200
Name: date, dtype: datetime64[ns]

print (pd.to_datetime(df.date, unit='d') - pd.offsets.Day(25569))
0   2016-11-30 23:55:28.963200
1   2016-11-30 23:55:28.963200
Name: date, dtype: datetime64[ns]

感谢Ted Petroulink。

【讨论】:

那个减法和乘法的值是多少? @MYGz,我猜这是逆向工程的结果 我不明白那些发明了这个serial date的人——这有点不合常理:datetime.datetime(1970,1,1) - datetime.datetime(1899,12,30) == 25569 是bug,我试试找。 您应该包含一个页面,说明您是如何发现 excel 时间错误以及如何像这样转换它的。 excel.tips.net/T002051_Converting_UNIX_Date_Time_Stamps.html

以上是关于遍历 Float 时间戳的 Pandas DataFrame 并转换为日期时间的主要内容,如果未能解决你的问题,请参考以下文章

Pandas:如何分析带有开始和结束时间戳的数据?

重置熊猫时间戳的时间部分

Pandas 遍历行并找到列名

pandas怎样对数据进行遍历

pandas怎样对数据进行遍历

Data Analysis with Pandas 4