добавление дат во фрейм данных панд - PullRequest
0 голосов
/ 08 октября 2018

В настоящее время у меня есть df в пандах с переменной «Dates», которая записывает данные, на которые была подана жалоба.

data = pd.read_csv("filename.csv") Dates Initially Received 07-MAR-08 08-APR-08 19-MAY-08

Как вы можете видеть, между датами подачи жалоб отсутствуют даты, возможно, несколько жалоб были поданы в один и тот же день.Есть ли способ заполнить пропущенные дни, оставив жалобы, поданные в тот же день, одинаковыми?

Я попытался создать новый df с datetime и объединить кадры данных,

days = pd.date_range(start='01-JAN-2008', end='31-DEC-2017')
df = pd.DataFrame(data=days)
df.index = range(3653)
dates = pd.merge(days, data['Dates'], how='inner')

, но я получаю следующую ошибку:

ValueError: can not merge DataFrame with instance of type <class 
'pandas.tseries.index.DatetimeIndex'>

Вот первые четырестроки данных

data

Ответы [ 2 ]

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

Создайте свой диапазон дат и используйте merge, чтобы внешне присоединить его к исходному фрейму данных, сохранив дубликаты.

import pandas as pd
from io import StringIO

TESTDATA = StringIO(
"""Dates;fruit
05-APR-08;apple
08-APR-08;banana
08-APR-08;pear
11-APR-08;grapefruit
""")

df = pd.read_csv(TESTDATA, sep=';', parse_dates=['Dates'])

dates = pd.date_range(start='04-APR-2008', end='12-APR-2008').to_frame()
pd.merge(
    df, dates, left_on='Dates', right_on=0,
    how='outer').sort_values(by=['Dates']).drop(columns=0)

#   Dates       fruit
#   2008-04-04  NaN
#   2008-04-05  apple
#   2008-04-06  NaN
#   2008-04-07  NaN
#   2008-04-08  banana
#   2008-04-08  pear
#   2008-04-09  NaN
#   2008-04-10  NaN
#   2008-04-11  grapefruit
#   2008-04-12  NaN
0 голосов
/ 08 октября 2018

Вы были близки, есть проблема с вашим вводом

Сначала выполните:

df = pd.read_csv('filename.csv', skiprows = 1)

Затем

days = pd.date_range(start='01-JAN-2008', end='31-DEC-2017')
df_clean = df.reset_index()
df_clean['idx dates'] = pd.to_datetime(df_clean['Initially Received'])
df2 = pd.DataFrame(data=days, index = range(3653), columns=['full dates'])
dates = pd.merge(df2, df_clean, left_on='full dates', right_on = 'idx dates', how='left')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...