【问题标题】:How to trim outliers in dates in python?如何在python中修剪日期中的异常值?
【发布时间】:2019-11-07 02:28:17
【问题描述】:

我有一个数据框df

0    2003-01-02
1    2015-10-31
2    2015-11-01
16   2015-11-02
33   2015-11-03
44   2015-11-04

我想修剪日期中的异常值。所以在这个例子中,我想删除日期为2003-01-02 的行。或者在更大的数据框中,我想删除不在 95% 或 99% 的区间内的日期。有没有可以做到这一点的功能?

【问题讨论】:

    标签: python date trim


    【解决方案1】:

    假设您已将列转换为日期时间格式:

    import pandas as pd
    import datetime as dt
    
    df = pd.DataFrame(data)
    df = pd.to_datetime(df[0])
    

    你可以这样做:

    include = df[df.dt.year > 2003]
    print(include)
    
    [out]:
    1   2015-10-31
    2   2015-11-01
    3   2015-11-02
    4   2015-11-03
    5   2015-11-04
    Name: 0, dtype: datetime64[ns]
    

    看看here

    ...关于您的答案(基本上是相同的想法,...有创意我的朋友):

    s = pd.Series(df)
    s10 = s.quantile(.10)
    s90 = s.quantile(.90)
    
    my_filtered_data = df[df.dt.year >= s10.year]
    my_filtered_data = my_filtered_data[my_filtered_data.dt.year <= s90.year]
    

    【讨论】:

    • 是的.. 但我宁愿有一个程序来识别异常值和间隔,例如 95 或 99% 的日期所在的间隔。听说有一种方法叫“trim”,但不知道是怎么工作的
    【解决方案2】:

    您可以在SeriesDataFrame 上使用quantile()

    dates = [datetime.date(2003,1,2),
             datetime.date(2015,10,31),
             datetime.date(2015,11,1),
             datetime.date(2015,11,2),
             datetime.date(2015,11,3),
             datetime.date(2015,11,4)]
    df = pd.DataFrame({'DATE': [pd.Timestamp(x) for x in dates]})
    print(df)
    
    qa = df['DATE'].quantile(0.1) #lower 10%
    qb = df['DATE'].quantile(0.9) #higher 10%
    
    print(qa, qb)
    
    #remove outliers
    xf = df[(df['DATE'] >= qa) & (df['DATE'] <= qb)]
    print(xf)
    

    输出是:

            DATE
    0 2003-01-02
    1 2015-10-31
    2 2015-11-01
    3 2015-11-02
    4 2015-11-03
    5 2015-11-04
    2009-06-01 12:00:00 2015-11-03 12:00:00
            DATE
    1 2015-10-31
    2 2015-11-01
    3 2015-11-02
    4 2015-11-03
    

    【讨论】:

    • 这正是我所需要的。谢谢!
    猜你喜欢
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 2017-12-25
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    相关资源
    最近更新 更多