我在熊貓資料框中收集了一些資料。日期列現在根本沒有用。我能夠洗掉方括號與各種不重要的資訊:
df['Date'] = df['Date'].str.replace(r"\(.*\)","")
但是,仍然有很多我不想要的資訊。我只需要日期、月份和年份。請參閱資料幀 [Date] 的輸出示例:
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 上午
我想嘗試將月份轉換為數字,然后指定后面的 8 個字符,dd/mm/yyyy,然后洗掉所有內容。我只是不確定如何將每個月轉換為整數,然后在 8 個字符后洗掉所有內容。此外,“8 個字符”方法可能不是最好的,因為并非所有日期都由 dd 給出。有什么更好的建議嗎?
感謝您的時間。
uj5u.com熱心網友回復:
我建議使用以下函式嘗試將字串轉換為 pd.datetime 物件,如果嘗試失敗,請切斷最后一個單詞并重試。
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()
您可以將函式應用到您的系列中,如下所示:
df['Time'] = df['Time'].apply(extract_date)
但請注意,這不是 100% 可靠,因為過多的元素(與日期無關)可能出現在文本的開頭。而且,日期和月份的順序可能會有所不同,這可能會影響結果。
uj5u.com熱心網友回復:
根據您愿意冒一些不準確的風險,這些模式會正確提取所有給定示例的年、月和日。
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')
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/362542.html
上一篇:過濾列包含所有子字串
