簡體   English   中英

刪除 pandas dataframe 中不需要的日期字符的方法

[英]Method to remove unwanted date characters in pandas dataframe

我在 pandas dataframe 中收集了一些數據。 日期列現在一點用都沒有。 我能夠刪除帶有各種不重要信息的方括號:

df['Date'] = df['Date'].str.replace(r"\(.*\)","")

但是,仍然有很多我不想要的信息。 我只需要日期、月份和年份。 請參閱數據幀 [日期] 中的 output 示例:

1932 年 9 月 14 日 14:40

1943 年 9 月 6 日下午 6:06

1991年11月15日當地時間16:00左右

1981 年 7 月 9 日 01:47 CST 17:47 UTC

1847 年 5 月 24 日 ~06:50 am

我考慮過嘗試將月份轉換為數字,然后指定在 8 個字符 dd/mm/yyyy 之后,然后刪除所有內容。 我只是不確定如何將每個月轉換為 integer,然后刪除 8 個字符后的所有內容。 此外,鑒於並非所有日期都由 dd 給出,“8 個字符”方法可能不是最好的。 有更好的建議嗎?

感謝您的時間。

我建議使用以下 function 嘗試將字符串轉換為 pd.datetime object ,如果嘗試失敗,請切斷最后一句話並重試。

def extract_date(text):
    while len(text) > 0:
        try:
            res = pd.to_datetime(text)
            break
        except:
            text = ' '.join(text.split()[:-1]) # drop the last "word"
    else:
        return pd.NaT
    return res.date()

您可以像這樣將 function 應用於您的系列:

df['Time'] = df['Time'].apply(extract_date)

但請注意,這不是 100% 可靠的,因為文本開頭可能會出現過多的元素(與日期無關)。 而且,日期和月份的順序可能會有所不同,這可能會影響結果。

根據您願意冒一些不准確的風險,這些模式可以正確提取所有示例的年、月和日。

year = df['Date'].str.extract(r'\b(\d{4})\b')
month = df['Date'].str.extract(r'([a-zA-Z]+)')
day = df['Date'].str.extract(r'\b(\d{1,2})\b')

暫無
暫無

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

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