无需小时即可从Data Series中删除错误数据

时间:2015-10-31 16:47:58

标签: python pandas

C是数据系列,形状为(10000000),dtype为dtype(< M8 [ns])。

C.head()

以2015-10-05 02:21:36的形式显示数据,但我有一些2010-01-01形式的条目。如何在没有时间的情况下删除它们?我发现在这个“2010-01-01”类型中:小时,分钟和秒都是零,所以:

我试过这个

c[(c['time'].apply(lambda x:x.hour) != 0) & (c['time'].apply(lambda x:x.minute) != 0) & (c['time'].apply(lambda x:x.second) != 0)]

但是我可能会有一些参赛作品2015-10-05 00:00:00。这样我就消除了它们。这是最好和最正确的方法是什么?

2 个答案:

答案 0 :(得分:1)

在这里一起回答你们的两个问题。这个和Pandas - Data Series - TypeError: Index must be DatetimeIndex

In [1]: import pandas as pd
        from datetime import time

In [2]: c = pd.Series(['2015-10-20 19:56:23', '2015-10-08', '2015-10-15 00:00:00', '2015-10-02 17:00:00'])
        c
Out[2]: 0    2015-10-20 19:56:23
        1             2015-10-08
        2    2015-10-15 00:00:00
        3    2015-10-02 17:00:00
        dtype: object

In [3]: df = pd.DataFrame(list(c), columns=['time'])
        df['time'] = pd.to_datetime(df['time'])
        df
Out[3]:     time
        0   2015-10-20 19:56:23
        1   2015-10-08 00:00:00
        2   2015-10-15 00:00:00
        3   2015-10-02 17:00:00

In [4]: clean_df = df[df['time'].dt.time != time(0,0,0)]
        clean_df
Out[4]:     time
        0   2015-10-20 19:56:23
        3   2015-10-02 17:00:00

In [5]: clean_df[(time(19,0,0) <= clean_df['time'].dt.time) &
                 (clean_df['time'].dt.time < time(20,0,0))]
Out[5]:     time
        0   2015-10-20 19:56:23

这会解决你的两个问题吗?

答案 1 :(得分:0)

更改为&#34;&amp;&#34;到&#34; |&#34;。当你有&#34;&amp;&#34;时,你删除这个08:50:00,这不是一个坏(00:00:00)时间。

c[(c['time'].apply(lambda x:x.hour) != 0) | (c['time'].apply(lambda x:x.minute) != 0) | (c['time'].apply(lambda x:x.second) != 0)]