在Pandas中使用Timedate函数选择连续的行

时间:2018-04-03 14:24:08

标签: python pandas dataframe

我正在分析以非标准间隔拍摄的气象数据,因此时间/日期条目并非都是连续的。已使用以下命令将csv文件读入pandas数据框:

df4=pd.read_csv(datafilenew,parse_dates[1],infer_datetime_format=True,na_values=['M'])

我想选择连续的数据块,例如每组至少5行具有连续的时间/日期值。 Here is a screenshot of a section of data。我想从这个例子中选择2011-09-10中的所有条目,然后继续扫描其余的数据并选择其他连续的行集。

有一种简单的方法可以做到这一点,因为我完全不知所措。感谢。

2 个答案:

答案 0 :(得分:0)

请回答this question

否则你可能会使用pandas diff()方法(see here) 并使用pandas where()方法(see here)来查找diff(timeseries)是您要查找的timedelta的索引

答案 1 :(得分:0)

你可以试试这个(假设您的数据帧已经排序):

m = df4.groupby([df4['TimeDate'].dt.date])['Direction'].transform('size') >= 5 # mask
df4 = df4.loc[m] # Apply mask

完整示例:

import pandas as pd

data1 = '''\
TimeDate,Direction
2010-01-05 10:00,2
2010-01-05 11:00,3
2010-01-05 12:00,4
2010-01-05 13:00,5
2010-01-05 14:00,6
2010-01-06 13:00,7'''

df4 = pd.read_csv(pd.compat.StringIO(data1), sep=',', parse_dates=['TimeDate'])
df4[df4.groupby([df4['TimeDate'].dt.date])['Direction'].transform('size') >= 5]
print(df4)
评论中建议

,如果您想为每个数据框执行某些操作,您只需执行此操作:

for ind, dfx in df4.groupby([df4['TimeDate'].dt.date]):
    if len(dfx) >= 5:
        # Apply your logic here for subdataframe with len >= 5
        print(dfx)
    else:
        # Apply logic for skipped subdataframes
        print('skip')