向熊猫数据框添加日期

时间:2018-10-07 23:09:46

标签: python pandas datetime dataframe

我目前在熊猫中有一个df,其中有一个名为“日期”的变量,该变量记录了投诉的数据。

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

您可以看到,在两次申诉之间缺少日期,也可能在同一天提出了多次申诉。有没有办法在同一天提交的投诉相同的情况下填写丢失的日子?

我尝试用日期时间创建一个新的df并将数据帧合并在一起,

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 :(得分:1)

您很亲密,您的输入有问题

首先要做:

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')

答案 1 :(得分:0)

创建日期范围,然后使用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