为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas:添加 2 个时间列并创建一个新列

Pandas:添加 2 个时间列并创建一个新列

明月笑刀无情 2023-08-22 16:37:59
我是熊猫新手,想知道这是否可能。我有两列,一列包含纪元时间,另一列包含毫秒计数。我想创建一个第三列,其时间以毫秒为单位,使用这两个列作为时间以毫秒为单位的单个时间列,以便我可以轻松地在给定时间之间选择数据帧。有人可以帮我解决这个问题吗?my_time         my_ms_counts1500702208      11500702208      21500702208      31500702208      41500702208      5对于这两个我想要一个时间列。
查看完整描述

3 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

pd.to_datetime会将您的纪元时间转换为日期(指定秒为单位),然后用于pd.to_timedelta添加毫秒。


df['datetime'] = (pd.to_datetime(df['my_time'], unit='s') 

                  + pd.to_timedelta(df['my_ms_counts'], unit='ms'))


#      my_time  my_ms_counts                datetime

#0  1500702208             1 2017-07-22 05:43:28.001

#1  1500702208             2 2017-07-22 05:43:28.002

#2  1500702208             3 2017-07-22 05:43:28.003

#3  1500702208             4 2017-07-22 05:43:28.004

#4  1500702208             5 2017-07-22 05:43:28.005

或者,您可以在转换为类似单位后合并两列。选择较小的单位 ,ms以避免float64表示不完美的问题。


df['full_time_ms'] = df['my_time']*1000 + df['my_ms_counts']


#      my_time  my_ms_counts                datetime   full_time_ms

#0  1500702208             1 2017-07-22 05:43:28.001  1500702208001

#1  1500702208             2 2017-07-22 05:43:28.002  1500702208002

#2  1500702208             3 2017-07-22 05:43:28.003  1500702208003

#3  1500702208             4 2017-07-22 05:43:28.004  1500702208004

#4  1500702208             5 2017-07-22 05:43:28.005  1500702208005

现在您可以转换指定的单列ms


pd.to_datetime(df['full_time_ms'], unit='ms')


#0   2017-07-22 05:43:28.001

#1   2017-07-22 05:43:28.002

#2   2017-07-22 05:43:28.003

#3   2017-07-22 05:43:28.004

#4   2017-07-22 05:43:28.005

#Name: full_time_ms, dtype: datetime64[ns]


查看完整回答
反对 回复 2023-08-22
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

您可以将两列相加到新的一列上:

df['new_column']=df['my_time']+df['my_ms_counts']

如果您需要一个带有时间戳日期的新列,您可以执行以下操作:

df['date'] = pd.to_datetime(df['new_column'],unit='s')


查看完整回答
反对 回复 2023-08-22
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

如果我理解正确的话,my_time是以秒为单位(自 UNIX 纪元开始以来),并且my_ms_counts是您希望添加的毫秒数。

如果您想要一个新列将两者相加,以毫秒为单位(自纪元开始以来),您需要乘以my_time1000 并添加my_ms_counts

这可以解决问题:

df["ms"] = 1000 * df["my_time"] + df["my_ms_counts"]

就像这样:

df["ms"] = df.my_time.mul(1000).add(df.my_ms_counts)

(如果您更喜欢方法链)

但是,如果我是你,我会花一些时间研究pandas对日期时间操作的支持。这将使您的应用程序更容易使用。您可以首先将列解析为pandas.Timestamp对象。您想要的具体操作可以通过以下方式实现:

df["new_dt_col"] = (
      pd.to_datetime(df.my_time, unit='s')
    + pd.to_timedelta(data.my_ms_counts, unit="ms")
)

请注意它如何将my_time列解析为Timestamp对象和my_ms_counts对象Timedelta,这些对象可以添加到时间戳中。


查看完整回答
反对 回复 2023-08-22
  • 3 回答
  • 0 关注
  • 1343 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信