[英]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.