【问题标题】:Filtering out improperly formatted datetime values in Python DataFrame在 Python DataFrame 中过滤掉格式不正确的日期时间值
【发布时间】:2019-07-14 18:10:03
【问题描述】:

我有一个 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')

【问题讨论】:

    标签: python pandas dataframe datetime plotly


    【解决方案1】:

    申请dateutil.parser,另见我的回答here

    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 参数,如here 所示。

    【讨论】:

    • 谢谢,成功了!抱歉,我花了这么长时间才回复并接受。
    【解决方案2】:

    尝试使用 dateutil.parser.parse 和 Pandas 应用函数解析数据框的日期列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-19
      • 2017-07-18
      • 2017-11-08
      • 1970-01-01
      相关资源
      最近更新 更多