Как проверить столбец даты и времени в определенном диапазоне в Python Panda? - PullRequest
1 голос
/ 23 сентября 2019

У меня есть файл, который содержит столбец даты.Я хочу проверить, что столбец даты и времени находится в определенном диапазоне (например, я получаю 5 файлов в день (где у меня нет контроля), в котором мне нужно выбрать файл, содержащий чтение почти в полночь.

Все строки в этом конкретном файле будут отложены на минуту. (Это все показания, поэтому интервал не более минуты)

Используя panda, я загружаю столбец даты следующим образом;

def read_dipsfile(writer):
    atg_path = '/Users/ratha/PycharmProjects/DataLoader/data/dips'
    files = os.listdir(atg_path)
    df = pd.DataFrame()
    dateCol = ['Dip Time']
    for f in files:
        if(f.endswith('.CSV')):
            data = pd.read_csv(os.path.join(atg_path, f), delimiter=',', skiprows=[1], skipinitialspace=True,
                               parse_dates=dateCol)

            if mid_day_check(data['Dip Time']):  --< gives error
                df = df.append(data)


def mid_day_check(startTime):
    midnightTime = datetime.datetime.strptime(startTime, '%Y%m%d')
    hourbefore = datetime.datetime.strptime(startTime, '%Y%m%d') + datetime.timedelta(hours=-1)

    if startTime <= midnightTime and startTime>=hourbefore:
        return True
    else:
        return False

В приведенном выше коде, как я могу передать столбец в мою функцию? В настоящее время я получаю следующую ошибку;

    midnightTime = datetime.datetime.strptime(startTime, '%Y%m%d')
TypeError: strptime() argument 1 must be str, not Series

Как я могу проверить временной диапазон, используя столбец даты panda?

Ответы [ 2 ]

2 голосов
/ 23 сентября 2019

Я думаю, вам нужно:

def mid_day_check(startTime):
    #remove times
    midnightTime = startTime.dt.normalize()
    #add timedelta
    hourbefore = midnightTime + pd.Timedelta(hours=-1)

    #test with between and return at least one True by any
    return startTime.between(hourbefore, midnightTime).any()
1 голос
/ 23 сентября 2019

Кажется, вы пытаетесь передать pd Series в strptime(), что недопустимо.Вы можете использовать метод pd.to_datetime() для достижения того же.

pd.to_datetime(data['Dip Time'], format='%b %d, %Y')

Проверьте эти ссылки для объяснения.

  1. strptime
  2. преобразование из серии
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...