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

时间:2020-09-21 15:37:13

标签: python pandas numpy

我是Pandas的新手,我想知道这是否有可能。

我有两列,分别是大纪元时间和毫秒。我想创建一个第3列,它以毫秒为单位使用这两个时间作为单个时间列,用毫秒为单位,这样我就可以轻松地在给定时间之间选择数据帧。有人可以帮我这个吗。

my_time         my_ms_counts
1500702208      1
1500702208      2
1500702208      3
1500702208      4
1500702208      5

有了这2个,我希望有一个时间栏。

3 个答案:

答案 0 :(得分:4)

pd.to_datetime会将您的时期时间转换为日期(为单位指定 s 秒),然后使用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]

答案 1 :(得分:0)

您可以将两列汇总为一个新列:

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

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

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

答案 2 :(得分:0)

如果我的理解正确,my_time以秒为单位(从UNIX时代开始),my_ms_counts是要添加的毫秒数。

如果您要使用以毫秒为单位的新列将两者相加(自纪元开始),则需要将my_time乘以1000,然后加上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对象的方法,可以将它们添加到时间戳中。