最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Pandas中將DataFrame列轉(zhuǎn)換為日期時(shí)間的詳細(xì)步驟

 更新時(shí)間:2025年05月12日 10:16:09   作者:cda2024  
你是否曾經(jīng)遇到過(guò)這樣的問(wèn)題:從 CSV 文件或數(shù)據(jù)庫(kù)中導(dǎo)入的數(shù)據(jù)中,日期列被識(shí)別為字符串類型,導(dǎo)致無(wú)法進(jìn)行時(shí)間序列分析或計(jì)算?今天,我們將深入探討如何在 Pandas 中將 DataFrame 列轉(zhuǎn)換為日期時(shí)間,并提供一些實(shí)用的技巧和最佳實(shí)踐,需要的朋友可以參考下

引言:掌握日期時(shí)間格式,數(shù)據(jù)處理更高效

你是否曾經(jīng)遇到過(guò)這樣的問(wèn)題:從 CSV 文件或數(shù)據(jù)庫(kù)中導(dǎo)入的數(shù)據(jù)中,日期列被識(shí)別為字符串類型,導(dǎo)致無(wú)法進(jìn)行時(shí)間序列分析或計(jì)算?或者,在合并多個(gè)數(shù)據(jù)集時(shí),由于日期格式不一致,導(dǎo)致數(shù)據(jù)對(duì)齊錯(cuò)誤?這些問(wèn)題的根本原因在于 Pandas 的 DataFrame 默認(rèn)情況下不會(huì)自動(dòng)將日期列識(shí)別為日期時(shí)間類型。今天,我們將深入探討如何在 Pandas 中將 DataFrame 列轉(zhuǎn)換為日期時(shí)間,并提供一些實(shí)用的技巧和最佳實(shí)踐。

為什么需要將列轉(zhuǎn)換為日期時(shí)間?

在數(shù)據(jù)科學(xué)領(lǐng)域,尤其是涉及時(shí)間序列分析時(shí),日期時(shí)間類型的正確處理至關(guān)重要。以下是幾個(gè)關(guān)鍵原因:

  1. 時(shí)間序列操作:日期時(shí)間類型允許我們進(jìn)行各種時(shí)間序列操作,如重采樣、滾動(dòng)窗口計(jì)算、滯后等。
  2. 日期運(yùn)算:可以方便地進(jìn)行日期之間的加減運(yùn)算,例如計(jì)算兩個(gè)日期之間的天數(shù)差。
  3. 排序與篩選:按日期排序或篩選特定時(shí)間段的數(shù)據(jù)變得更加簡(jiǎn)單。
  4. 可視化:在繪制時(shí)間序列圖表時(shí),日期時(shí)間類型能更好地支持軸標(biāo)簽和刻度。

使用 pd.to_datetime() 方法

Pandas 提供了一個(gè)非常強(qiáng)大的函數(shù) pd.to_datetime(),用于將字符串或其他類型的列轉(zhuǎn)換為日期時(shí)間格式。下面通過(guò)具體的例子來(lái)說(shuō)明其用法。

基本用法

假設(shè)我們有一個(gè)包含日期字符串的 DataFrame

import pandas as pd

data = {'date': ['2023-01-01', '2023-01-02', '2023-01-03']}
df = pd.DataFrame(data)
print(df.dtypes)

輸出結(jié)果如下:

date    object
dtype: object

可以看到,默認(rèn)情況下,date 列是 object 類型(即字符串)。我們可以使用 pd.to_datetime() 將其轉(zhuǎn)換為 datetime64[ns] 類型:

df['date'] = pd.to_datetime(df['date'])
print(df.dtypes)

輸出結(jié)果變?yōu)椋?/p>

date    datetime64[ns]
dtype: object

處理不同的日期格式

實(shí)際應(yīng)用中,日期格式可能千差萬(wàn)別。pd.to_datetime() 支持多種常見(jiàn)的日期格式,并且可以通過(guò)參數(shù) format 明確指定格式。例如:

data = {'date': ['01/01/2023', '01/02/2023', '01/03/2023']}
df = pd.DataFrame(data)

df['date'] = pd.to_datetime(df['date'], format='%m/%d/%Y')
print(df.dtypes)

如果遇到不規(guī)范的日期格式,還可以使用 errors='coerce' 參數(shù)將無(wú)法解析的值設(shè)為 NaT(Not a Time):

data = {'date': ['01/01/2023', 'invalid_date', '01/03/2023']}
df = pd.DataFrame(data)

df['date'] = pd.to_datetime(df['date'], format='%m/%d/%Y', errors='coerce')
print(df)

輸出結(jié)果:

         date
0 2023-01-01
1        NaT
2 2023-01-03

處理缺失值

有時(shí),數(shù)據(jù)集中可能包含缺失值(如 NaN 或空字符串)。pd.to_datetime() 在處理這些情況時(shí)表現(xiàn)得非常智能,會(huì)自動(dòng)將其轉(zhuǎn)換為 NaT

data = {'date': ['2023-01-01', None, '2023-01-03']}
df = pd.DataFrame(data)

df['date'] = pd.to_datetime(df['date'])
print(df)

輸出結(jié)果:

        date
0 2023-01-01
1        NaT
2 2023-01-03

性能優(yōu)化

當(dāng)處理大規(guī)模數(shù)據(jù)時(shí),性能是一個(gè)不可忽視的問(wèn)題。為了提高轉(zhuǎn)換速度,可以利用 cache=True 參數(shù)。該參數(shù)會(huì)在內(nèi)部緩存已解析的日期格式,從而加速后續(xù)相同格式的解析過(guò)程:

data = {'date': ['2023-01-01'] * 100000}
df = pd.DataFrame(data)

%time df['date'] = pd.to_datetime(df['date'], cache=True)

處理時(shí)區(qū)信息

在全球化背景下,跨時(shí)區(qū)的數(shù)據(jù)處理變得越來(lái)越重要。Pandas 提供了豐富的時(shí)區(qū)支持功能,幫助我們?cè)诓煌貐^(qū)之間進(jìn)行準(zhǔn)確的時(shí)間轉(zhuǎn)換。

添加時(shí)區(qū)信息

假設(shè)我們有一列 UTC 時(shí)間戳,希望將其轉(zhuǎn)換為帶有時(shí)區(qū)信息的日期時(shí)間對(duì)象:

data = {'utc_time': ['2023-01-01 12:00:00', '2023-01-02 12:00:00']}
df = pd.DataFrame(data)

df['utc_time'] = pd.to_datetime(df['utc_time']).dt.tz_localize('UTC')
print(df)

輸出結(jié)果:

                 utc_time
0 2023-01-01 12:00:00+00:00
1 2023-01-02 12:00:00+00:00

轉(zhuǎn)換時(shí)區(qū)

接下來(lái),我們可以將 UTC 時(shí)間轉(zhuǎn)換為其他時(shí)區(qū),例如中國(guó)標(biāo)準(zhǔn)時(shí)間(CST):

df['cst_time'] = df['utc_time'].dt.tz_convert('Asia/Shanghai')
print(df)

輸出結(jié)果:

                 utc_time                  cst_time
0 2023-01-01 12:00:00+00:00 2023-01-01 20:00:00+08:00
1 2023-01-02 12:00:00+00:00 2023-01-02 20:00:00+08:00

移除時(shí)區(qū)信息

在某些情況下,我們可能不需要時(shí)區(qū)信息,這時(shí)可以使用 tz_localize(None) 來(lái)移除時(shí)區(qū):

df['local_time'] = df['cst_time'].dt.tz_localize(None)
print(df)

輸出結(jié)果:

                 utc_time                  cst_time           local_time
0 2023-01-01 12:00:00+00:00 2023-01-01 20:00:00+08:00 2023-01-01 20:00:00
1 2023-01-02 12:00:00+00:00 2023-01-02 20:00:00+08:00 2023-01-02 20:00:00

實(shí)戰(zhàn)案例:處理復(fù)雜的日期格式

在現(xiàn)實(shí)世界中,日期格式往往比想象中復(fù)雜得多。接下來(lái),我們通過(guò)一個(gè)實(shí)際案例來(lái)展示如何應(yīng)對(duì)這種情況。

案例背景

某公司有一個(gè)銷售記錄表,其中包含訂單日期。但由于歷史遺留問(wèn)題,日期格式非?;靵y,有以下幾種情況:

  1. 標(biāo)準(zhǔn)日期格式(如 2023-01-01
  2. 美式日期格式(如 01/01/2023
  3. 含有時(shí)區(qū)信息的 ISO8601 格式(如 2023-01-01T12:00:00Z

我們需要將所有日期統(tǒng)一轉(zhuǎn)換為標(biāo)準(zhǔn)的日期時(shí)間格式。

解決方案

首先,導(dǎo)入數(shù)據(jù)并查看前幾行:

data = {
    'order_date': [
        '2023-01-01',
        '01/02/2023',
        '2023-01-03T15:00:00Z',
        '2023-01-04'
    ]
}
df = pd.DataFrame(data)
print(df)

輸出結(jié)果:

              order_date
0               2023-01-01
1               01/02/2023
2  2023-01-03T15:00:00Z
3               2023-01-04

然后,使用 pd.to_datetime() 進(jìn)行轉(zhuǎn)換:

df['order_date'] = pd.to_datetime(df['order_date'], infer_datetime_format=True, errors='coerce')
print(df)

輸出結(jié)果:

          order_date
0 2023-01-01 00:00:00
1 2023-01-02 00:00:00
2 2023-01-03 15:00:00
3 2023-01-04 00:00:00

通過(guò)設(shè)置 infer_datetime_format=True,Pandas 會(huì)自動(dòng)推斷最合適的日期格式;同時(shí)使用 errors='coerce' 來(lái)處理無(wú)法解析的情況。

最佳實(shí)踐與技巧

在日常工作中,掌握一些最佳實(shí)踐和技巧能夠顯著提高工作效率和代碼質(zhì)量。

使用 read_csv() 直接加載日期時(shí)間列

當(dāng)從 CSV 文件讀取數(shù)據(jù)時(shí),可以利用 parse_dates 參數(shù)直接將指定列轉(zhuǎn)換為日期時(shí)間類型:

df = pd.read_csv('sales_data.csv', parse_dates=['order_date'])

這不僅簡(jiǎn)化了代碼,還能提高讀取效率。

避免重復(fù)轉(zhuǎn)換

一旦將某一列成功轉(zhuǎn)換為日期時(shí)間類型,盡量避免對(duì)其進(jìn)行重復(fù)轉(zhuǎn)換。因?yàn)槊看无D(zhuǎn)換都會(huì)帶來(lái)額外的計(jì)算開(kāi)銷。如果確實(shí)需要重新賦值,建議先檢查目標(biāo)列的類型:

if df['date'].dtype != 'datetime64[ns]':
    df['date'] = pd.to_datetime(df['date'])

利用向量化操作

相比于逐行遍歷,Pandas 的向量化操作通常具有更高的性能。因此,在處理大量數(shù)據(jù)時(shí),應(yīng)優(yōu)先選擇內(nèi)置的向量化方法。例如,計(jì)算兩個(gè)日期之間的天數(shù)差:

df['days_diff'] = (df['end_date'] - df['start_date']).dt.days

注意內(nèi)存占用

對(duì)于超大規(guī)模的數(shù)據(jù)集,頻繁創(chuàng)建新的列可能會(huì)導(dǎo)致內(nèi)存不足的問(wèn)題。此時(shí),可以考慮使用 inplace=True 參數(shù)直接修改原列,或采用增量處理的方式分批次處理數(shù)據(jù)。

總結(jié)

到此這篇關(guān)于在Pandas中將DataFrame列轉(zhuǎn)換為日期時(shí)間的詳細(xì)步驟的文章就介紹到這了,更多相關(guān)Pandas DataFrame列轉(zhuǎn)日期時(shí)間內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python使用paramiko實(shí)現(xiàn)ssh的功能詳解

    python使用paramiko實(shí)現(xiàn)ssh的功能詳解

    這篇文章主要介紹了python使用paramiko實(shí)現(xiàn)ssh的功能詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 深度探索Python列表切片的高級(jí)應(yīng)用與最佳實(shí)踐

    深度探索Python列表切片的高級(jí)應(yīng)用與最佳實(shí)踐

    Python的切片語(yǔ)法是數(shù)據(jù)處理中最優(yōu)雅的特性之一,它的基本形式是 list[start:stop:step],本文將和大家聊聊Python切片的相關(guān)應(yīng)用,感興趣的小伙伴可以了解下
    2026-02-02
  • Python中生成真隨機(jī)數(shù)的3種安全方式

    Python中生成真隨機(jī)數(shù)的3種安全方式

    在編程中,隨機(jī)數(shù)被廣泛應(yīng)用于模擬、游戲開(kāi)發(fā)、密碼學(xué)和機(jī)器學(xué)習(xí)等領(lǐng)域,Python 提供了內(nèi)置的 random模塊,用于生成偽隨機(jī)數(shù),下面小編就和大家詳細(xì)介紹一下Python實(shí)現(xiàn)生成隨機(jī)數(shù)的詳細(xì)方法吧
    2026-03-03
  • 通過(guò)pycharm的database設(shè)置進(jìn)行數(shù)據(jù)庫(kù)的可視化方式

    通過(guò)pycharm的database設(shè)置進(jìn)行數(shù)據(jù)庫(kù)的可視化方式

    這篇文章主要介紹了通過(guò)pycharm的database設(shè)置進(jìn)行數(shù)據(jù)庫(kù)的可視化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 基于flask實(shí)現(xiàn)五子棋小游戲

    基于flask實(shí)現(xiàn)五子棋小游戲

    這篇文章主要為大家詳細(xì)介紹了基于flask實(shí)現(xiàn)五子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • python導(dǎo)入其他目錄下模塊的四種情況

    python導(dǎo)入其他目錄下模塊的四種情況

    在python工程中常常需要使用import引入自己編寫的其他模塊,但其它模塊有時(shí)不在同一個(gè)文件夾下,下面這篇文章主要給大家介紹了關(guān)于python導(dǎo)入其他目錄下模塊的四種情況,需要的朋友可以參考下
    2022-12-12
  • python+opencv邊緣提取與各函數(shù)參數(shù)解析

    python+opencv邊緣提取與各函數(shù)參數(shù)解析

    這篇文章主要介紹了python+opencv邊緣提取與各函數(shù)參數(shù)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Python+OpenCV實(shí)現(xiàn)圖像識(shí)別替換功能詳解

    Python+OpenCV實(shí)現(xiàn)圖像識(shí)別替換功能詳解

    OpenCV-Python是一個(gè)Python庫(kù),旨在解決計(jì)算機(jī)視覺(jué)問(wèn)題。本文將利用Python+OpenCV實(shí)現(xiàn)圖像識(shí)別替換功能,感興趣的小伙伴可以動(dòng)手嘗試一下
    2022-07-07
  • pandas全表查詢定位某個(gè)值所在行列的方法

    pandas全表查詢定位某個(gè)值所在行列的方法

    下面小編就為大家分享一篇pandas全表查詢定位某個(gè)值所在行列的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Python3實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲

    Python3實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲

    這篇文章主要為大家詳細(xì)介紹了Python3實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04

最新評(píng)論

新化县| 留坝县| 申扎县| 松阳县| 通河县| 昌图县| 绿春县| 普兰店市| 景泰县| 岐山县| 乾安县| 屯昌县| 柯坪县| 疏附县| 新绛县| 柳江县| 色达县| 清水河县| 观塘区| 青铜峡市| 娱乐| 宜章县| 曲水县| 罗山县| 三原县| 绿春县| 庆安县| 铁岭县| 大渡口区| 达州市| 锦屏县| 普宁市| 永康市| 西城区| 合山市| 青川县| 集贤县| 堆龙德庆县| 高台县| 达拉特旗| 乃东县|