Python:减少精度pandas时间戳数据帧

时间:2015-09-28 15:59:03

标签: python pandas timestamp dataframe

您好我有以下数据框

df1 = 

       Record_ID       Time
        94704   2014-03-10 07:19:19
        94705   2014-03-10 07:21:44
        94706   2014-03-10 07:21:45
        94707   2014-03-10 07:21:54
        94708   2014-03-10 07:21:55

是否有可能跟随?

;WITH CTE AS (
SELECT FIRST, LAST, MAX(FOOD) AS FOOD, COUNT(*) AS COUNT
FROM TABLE1
GROUP BY FIRST, LAST
HAVING COUNT(*) >= 2)
SELECT *
FROM TABLE1
WHERE FIRST+LAST IN (SELECT FIRST+LAST FROM CTE)

3 个答案:

答案 0 :(得分:16)

您可以使用datetime64[s]将基础datetime64[ns]值转换为astype值:

In [11]: df['Time'] = df['Time'].astype('datetime64[s]')

In [12]: df
Out[12]: 
   Record_ID                Time
0      94704 2014-03-10 07:19:19
1      94705 2014-03-10 07:21:44
2      94706 2014-03-10 07:21:45
3      94707 2014-03-10 07:21:54
4      94708 2014-03-10 07:21:55

请注意,由于Pandas Series和DataFrame store all datetime values as datetime64[ns]这些datetime64[s]值会自动转换回datetime64[ns],因此最终结果仍会存储为datetime64[ns]值,但是调用astype会导致秒的小数部分被删除。

如果您希望拥有datetime64[s]个NumPy数组,可以使用df['Time'].values.astype('datetime64[s]')

答案 1 :(得分:7)

如果您确实必须删除日期时间的microsecond部分,则可以使用Timestamp.replace方法和Series.apply方法将其应用于整个系列,以替换{{1部分与microsecond。示例 -

0

演示 -

df['Time'] = df['Time'].apply(lambda x: x.replace(microsecond=0))

答案 2 :(得分:1)

对于0.24.0或更高版本的熊猫,您只需在ceil()函数中设置freq参数即可获得所需的精度:

df['Time'] = df.Time.dt.ceil(freq='s')  

In [28]: df
Out[28]:
   Record_ID                Time
0      94704 2014-03-10 07:19:19
1      94705 2014-03-10 07:21:44
2      94706 2014-03-10 07:21:45
3      94707 2014-03-10 07:21:54
4      94708 2014-03-10 07:21:55