如何在 Pandas 中將 DataFrame 列轉換為日期時間
-
Pandas
to_datetime
函式將 DataFrame 列轉換為日期時間 -
DataFrame
apply
方法將 DataFrame 列轉換為 Datetime - 將 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
模組中的 stftime
或 strptime
函式中的格式相同。
>>> 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_format
的 to_datetime
是 true
來轉換切換到更快的模式。
解析速度將會提高 5〜6 倍。
DataFrame apply
方法將 DataFrame 列轉換為 Datetime
apply(func, *args, **kwds)
DataFrame
的 apply
方法對每個列或行應用 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%。
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn相關文章 - Pandas DataFrame
- 如何將 Pandas DataFrame 列標題獲取為列表
- 如何刪除 Pandas DataFrame 列
- 如何在 Pandas DataFrame 中將浮點數轉換為整數
- 如何按一列的值對 Pandas DataFrame 進行排序
- 如何用 group-by 和 sum 獲得 Pandas 總和
相關文章 - Pandas DataFrame Column
- 如何將 Pandas DataFrame 列標題獲取為列表
- 如何刪除 Pandas DataFrame 列
- 如何獲得 Pandas 列中元素總和
- 如何更改 Panas DataFrame 列的順序
- 如何在 Pandas 中將 DataFrame 列轉換為字串