如何在 Pandas 中將 DataFrame 列轉換為日期時間

Jinku Hu 2023年1月30日
  1. Pandas to_datetime 函式將 DataFrame 列轉換為日期時間
  2. DataFrame apply 方法將 DataFrame 列轉換為 Datetime
  3. 將 DataFrame 列轉換為日期時間方法的效能比較
如何在 Pandas 中將 DataFrame 列轉換為日期時間

我們將介紹將將 Pandas DataFrame 列轉換為 Python 日期時間的方法。

  • Pandas to_datetime() 函式
  • 用 DataFrame 的 apply 方法對列中的元素進行操作

我們將在後續介紹中使用相同的 DataFrame,如下,

>>> from datetime import datetime, timedelta
>>> from pandas import DataFrame
>>> df = DataFrame.from_items(
    [('Alfa', [1, 2, 3]), 
     ('Bravo', [4, 5, 6]), 
     ('Datetime', [datetime.strftime(datetime.now()-timedelta(days=_), "%m/%d/%Y, %H:%M:%S") for _ in range(3)])], 
    orient='index', 
    columns=['A', 'B', 'C']).T
>>> df
  Alfa Bravo              Datetime
A    1     4  12/07/2019, 14:08:55
B    2     5  12/06/2019, 14:08:55
C    3     6  12/05/2019, 14:08:55

Pandas to_datetime 函式將 DataFrame 列轉換為日期時間

Pandas to_datetime 函式 將給定引數轉換為 datetime

pandas.to_datetime(param, format="")

該格式指定日期時間字串的格式。它與 Python datetime 模組中的 stftimestrptime 函式中的格式相同。

>>> df
  Alfa Bravo              Datetime
A    1     4  12/07/2019, 14:08:55
B    2     5  12/06/2019, 14:08:55
C    3     6  12/05/2019, 14:08:55
>>> df['Datetime'] = pd.to_datetime(df['Datetime'], format="%m/%d/%Y, %H:%M:%S")
>>> df
  Alfa Bravo            Datetime
A    1     4 2019-12-07 14:08:55
B    2     5 2019-12-06 14:08:55
C    3     6 2019-12-05 14:08:55

to_datetime() 函式不會就地修改 DataFrame 資料,因此我們需要將返回的 Series 分配給特定的 Pandas DataFrame 列。

to_datetime() 函式可以智慧地轉換日期時間

to_datetime() 函式無需指定 datetime 格式字串即可以一種智慧的方式轉換為 datetime。它將自動、智慧地找到字串模式。

>>> df['Datetime'] = pd.to_datetime(df['Datetime'])
>>> df
  Alfa Bravo            Datetime
A    1     4 2019-12-07 14:08:55
B    2     5 2019-12-06 14:08:55
C    3     6 2019-12-05 14:08:55
注意

儘管 to_datetime 可以在不提供 format 的情況下智慧的完成轉換,但是轉換速度遠低於給出 format 時的速度。

我們可以設定選項 infer_datetime_formatto_datetimetrue 來轉換切換到更快的模式。

解析速度將會提高 5〜6 倍。

DataFrame apply 方法將 DataFrame 列轉換為 Datetime

apply(func, *args, **kwds)

DataFrameapply 方法對每個列或行應用 func 函式。

為了簡單起見,我們可以使用 lambda 函式來代替 func

>>> df['Datetime'] = df['Datetime'].apply(lambda _: datetime.strptime(_,"%m/%d/%Y, %H:%M:%S"))
           
>>> df
           
  Alfa Bravo            Datetime
A    1     4 2019-12-07 14:44:35
B    2     5 2019-12-06 14:44:35
C    3     6 2019-12-05 14:44:35

將 DataFrame 列轉換為日期時間方法的效能比較

讓我們用 timeit 來比較本文介紹的兩種方法的時間效能。

In[1]: % timeit pd.to_datetime(df['Datetime'], format="%m/%d/%Y, %H:%M:%S")
452 µs ± 85.3 µs per loop(mean ± std. dev. of 7 runs, 1000 loops each)

In[2]: % timeit df['Datetime'].apply(lambda _: datetime.strptime(_, "%m/%d/%Y, %H:%M:%S"))
377 µs ± 58.5 µs per loop(mean ± std. dev. of 7 runs, 1000 loops each)

apply 方法甚至比 Pandas 原生的 to_datetime 方法稍好一點,其執行時間約為 to_datetime 函式的 80%。

作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - Pandas DataFrame

相關文章 - Pandas DataFrame Column

相關文章 - Python DateTime