Просто создайте колонку со всеми днями одного месяца - с пандами - PullRequest
0 голосов
/ 07 октября 2018

Я действительно стараюсь более 4 часов выполнить простую задачу: создать столбец в df с пандами, которые представляют от первого дня до последнего дня месяца.Например:

index date
0     2018-08-01
1     2018-08-02
2     2018-08-03
...   ...

Я сдаюсь и делаю это в Excel, сохраняю в csv, чтобы импортировать снова как df в пандах ... спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

Создание дневного индекса даты и времени с использованием времени начала и окончания периода с месячной периодичностью.

month = '2018-08'
period = pd.Period(month, freq='M')
>>> pd.Series(pd.DatetimeIndex(start=period.start_time, end=period.end_time, freq='D')).to_frame('date')
     date
0    2018-08-01
1    2018-08-02
2    2018-08-03
...
30   2018-08-31
0 голосов
/ 07 октября 2018

Хорошо, конечно ... Я не мог удержаться, чтобы написать ответ на ваш вопрос.Когда вы говорите все дни в месяце, я имею в виду: how do we get the last day? И ответом на это является использование смещения (которое уже встроено в Панды).

Кроме того, что вас заправляютто, что в Пандах называется date_range.Существует множество вариантов создания диапазона дат, например, с интервалами и частотой (по умолчанию день).Но чтобы прояснить ситуацию, давайте передадим три переменные:

  1. start: наша начальная дата в качестве объекта времени
  2. end: наша конечная дата в качестве объекта времени.Создайте его со смещением панд Monthsend
  3. частота: день (это необязательно, но дает понять, что мы хотим дни)

Примечание.Передайте дату окончания, так как дни месяца могут различаться.

Рассмотрите этот пример:

import pandas as pd

month = '2018-08'

df = pd.DataFrame({
    'date': pd.date_range(
        start = pd.Timestamp(month),                        
        end = pd.Timestamp(month) + pd.offsets.MonthEnd(0),  # <-- 2018-08-31 with MonthEnd
        freq = 'D'
    )
})

date_range является мощным, и если вы хотите каждый час, вы можете сделать что-то вродеэто:

df = pd.DataFrame({
    'date': pd.date_range(
        start = pd.Timestamp(month),
        end = pd.Timestamp(month) + pd.offsets.MonthEnd(0) + pd.Timedelta(days=1),
        freq = 'H',     # <--- try '3h', '6h', '12h' if you want
        closed = 'left'
    )
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...