[英]Filtering out improperly formatted datetime values in Python DataFrame
我有一個DataFrame,其中一列存儲日期。
但是,其中一些日期的格式正確,例如'2018-12-24 17:00:00'
等日期時間對象,而其他日期則不是,並且像'20181225'
這樣存儲。
當我嘗試使用plotly繪制這些圖形時,格式不正確的值變成了EPOCH日期,這是一個問題。
有什么辦法可以讓我只復制那些日期格式正確的行的DataFrame?
我嘗試使用
clean_dict= dailySum_df.where(dailySum_df[isinstance(dailySum_df['time'],datetime.datetime)])
方法,但由於“數組條件的形狀必須與自身的形狀相同”錯誤而無法正常工作。
dailySum_df = pd.DataFrame(list(cursors['dailySum']))
trace = go.Scatter(
x=dailySum_df['time'],
y=dailySum_df['countMessageIn']
)
data = [trace]
py.plot(data, filename='basic-line')
應用dateutil.parser
,還看到我的答案在這里 :
import dateutil.parser as dparser
def myparser(x):
try:
return dparser.parse(x)
except:
return None
df = pd.DataFrame( {'time': ['2018-12-24 17:00:00', '20181225', 'no date at all'], 'countMessageIn': [1,2,3]})
df.time = df.time.apply(myparser)
df = df[df.time.notnull()]
輸入:
time countMessageIn
0 2018-12-24 17:00:00 1
1 20181225 2
2 no date at all 3
輸出:
time countMessageIn
0 2018-12-24 17:00:00 1
1 2018-12-25 00:00:00 2
與Gustavo的解決方案不同,它可以處理完全沒有可識別日期的行,並且可以根據您的問題過濾掉此類行。
如果你原來的時間列可能包含其他文本除日期本身,包括fuzzy=True
參數如圖所示這里 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.