簡體   English   中英

在Python DataFrame中過濾掉格式不正確的日期時間值

[英]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.parse和Pandas apply函數解析數據框的日期列。

在此處輸入圖片說明

應用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.

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