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]
TA贡献1911条经验 获得超7个赞
您可以将两列相加到新的一列上:
df['new_column']=df['my_time']+df['my_ms_counts']
如果您需要一个带有时间戳日期的新列,您可以执行以下操作:
df['date'] = pd.to_datetime(df['new_column'],unit='s')
TA贡献1846条经验 获得超7个赞
如果我理解正确的话,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
,这些对象可以添加到时间戳中。
添加回答
举报