簡體   English   中英

Pandas:添加2個時間列並新建一個列

[英]Pandas : Add 2 time columns and create a new column

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

我有兩列,一列是紀元時間,另一列是毫秒數。 我想創建一個第三列,它的時間以毫秒為單位,將這兩個列用作以毫秒為單位的時間列,這樣我就可以輕松地在給定時間之間生成 select 數據幀。 有人可以幫我解決這個問題嗎?

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

對於這 2 個,我想要一個時間列。

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]

您可以將兩列加在一個新列上:

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

如果您需要一個帶有時間戳日期的新列,您可以執行以下操作:

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

如果我理解正確, 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_countsTimedelta對象,后者可以添加到時間戳中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM