首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在月度数据中向Pandas添加丢失的数据

如何在月度数据中向Pandas添加丢失的数据
EN

Stack Overflow用户
提问于 2018-07-26 23:11:30
回答 2查看 33关注 0票数 1

我有以下数据框架:

代码语言:javascript
运行
复制
Date                        
2002-01-01  10.0   NaN   NaN
2002-05-01   NaN  30.0  40.0
2002-07-01   NaN   NaN  50.0

我想用零来补齐缺失的月份。我实际上能够做到这一点,但我只能添加丢失的整个天数范围,因为您可以在以下代码中获得。代码的相关部分用

代码语言:javascript
运行
复制
#############################

-

代码语言:javascript
运行
复制
def createSeriesOfCompanies(df):
    listOfCompanies=list(set(df['Company']))
    dfSeries=df.pivot(index='Date', columns='Company', values='var1')
    # Here I include the missing dates
    #######################################################
    initialDate=dfSeries.index[0]
    endDate=dfSeries.index[-1]
    idx = pd.date_range(initialDate, endDate)
    dfSeries.index = pd.DatetimeIndex(dfSeries.index)
    dfSeries = dfSeries.reindex(idx, fill_value=0)
    ########################################################
    # Here it finishes the procedure    




def creatingDataFrame():

    dateList=[]
    dateList.append(datetime.date(2002,1,1))
    dateList.append(datetime.date(2002,7,1))
    dateList.append(datetime.date(2002,5,1))
    dateList.append(datetime.date(2002,5,1))
    dateList.append(datetime.date(2002,7,1))
    raw_data = {'Date': dateList,            
                'Company': ['A', 'B', 'B', 'C' , 'C'],                
                'var1': [10, 20, 30, 40 , 50]}

    df = pd.DataFrame(raw_data, columns = ['Date','Company', 'var1'])
    df.loc[1, 'var1'] = np.nan
    return df


if __name__=="__main__":
    df=creatingDataFrame()
    print(df)


    dfSeries,listOfCompanies=createSeriesOfCompanies(df)        

我想要一个

代码语言:javascript
运行
复制
Date                        
2002-01-01  10.0   NaN   NaN
2002-02-01  0      0     0
2002-03-01  0      0     0
2002-04-01  0      0     0
2002-05-01   NaN  30.0  40.0
2002-06-01  0      0     0
2002-07-01   NaN   NaN  50.0

但我得到了这个

代码语言:javascript
运行
复制
Company        A    B     C
2002-01-01  10.0  NaN   NaN
2002-01-02   0.0  0.0   0.0
2002-01-03   0.0  0.0   0.0
2002-01-04   0.0  0.0   0.0
2002-01-05   0.0  0.0   0.0
2002-01-06   0.0  0.0   0.0
2002-01-07   0.0  0.0   0.0
2002-01-08   0.0  0.0   0.0
2002-01-09   0.0  0.0   0.0
2002-01-10   0.0  0.0   0.0
2002-01-11   0.0  0.0   0.0
2002-01-12   0.0  0.0   0.0
2002-01-13   0.0  0.0   0.0
2002-01-14   0.0  0.0   0.0
2002-01-15   0.0  0.0   0.0
2002-01-16   0.0  0.0   0.0
2002-01-17   0.0  0.0   0.0
2002-01-18   0.0  0.0   0.0
2002-01-19   0.0  0.0   0.0
2002-01-20   0.0  0.0   0.0
2002-01-21   0.0  0.0   0.0
2002-01-22   0.0  0.0   0.0
2002-01-23   0.0  0.0   0.0
2002-01-24   0.0  0.0   0.0
2002-01-25   0.0  0.0   0.0
2002-01-26   0.0  0.0   0.0
2002-01-27   0.0  0.0   0.0
2002-01-28   0.0  0.0   0.0
2002-01-29   0.0  0.0   0.0
2002-01-30   0.0  0.0   0.0

..。

我该如何处理这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-26 23:19:06

您可以使用reindex。假设日期是索引,

代码语言:javascript
运行
复制
df.index = pd.to_datetime(df.index)
df.reindex(pd.date_range(df.index.min(), df.index.max(), freq = 'MS'))

            A    B      C
2002-01-01  10.0 NaN    NaN
2002-02-01  NaN  NaN    NaN
2002-03-01  NaN  NaN    NaN
2002-04-01  NaN  NaN    NaN
2002-05-01  NaN  30.0   40.0
2002-06-01  NaN  NaN    NaN
2002-07-01  NaN  NaN    50.0
票数 2
EN

Stack Overflow用户

发布于 2018-07-26 23:28:02

Use asfreq by MS (月初):

代码语言:javascript
运行
复制
df=creatingDataFrame()

df = df.pivot(index='Date', columns='Company', values='var1').asfreq('MS', fill_value=0)
print (df)
Company        A     B     C
Date                        
2002-01-01  10.0   NaN   NaN
2002-02-01   0.0   0.0   0.0
2002-03-01   0.0   0.0   0.0
2002-04-01   0.0   0.0   0.0
2002-05-01   NaN  30.0  40.0
2002-06-01   0.0   0.0   0.0
2002-07-01   NaN   NaN  50.0
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51542181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档