我是Pandas的新手,我想知道这是否有可能。
我有两列,分别是大纪元时间和毫秒。我想创建一个第3列,它以毫秒为单位使用这两个时间作为单个时间列,用毫秒为单位,这样我就可以轻松地在给定时间之间选择数据帧。有人可以帮我这个吗。
my_time my_ms_counts
1500702208 1
1500702208 2
1500702208 3
1500702208 4
1500702208 5
有了这2个,我希望有一个时间栏。
答案 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
对象的方法,可以将它们添加到时间戳中。