【问题标题】:Appending missing months in a pandas df在 pandas df 中添加缺失的月份
【发布时间】:2021-06-29 13:59:32
【问题描述】:

我有一个关注者df

df
               A                     B                   C
January        209733                0                   0
February       223054                0                   0
March          127957                0                   0
April          67021                 0                   0

我想将缺少的月份作为空单元格添加到此df。为此,我创建了一个df_empty

df_empty = {'A': '', 'B': '', 'C': ''}

我想通过pd.concat 将它发送给我原来的df

df = pd.concat([df, pd.DataFrame(df_empty, index=['May', 'June', 'July', ...])])

但是我不想硬编码所有月份,而是应该认识到df中的最后一个月是'April',并根据其他缺失的月份填写index=[]

这里是df的索引:

df.index
Index(['January', 'February', 'March', 'April'], dtype='object')

我该怎么做?

【问题讨论】:

  • 缺几个月”你的意思是填满一整年?
  • 是的。从 df.index[-1] 到 12 月的年末,基本上是字符串中的月份列表

标签: python pandas dataframe datetime


【解决方案1】:

试试:

idx = pd.date_range(start="1950-01", freq="M", periods=12)
df = df.reindex(idx.month_name()).fillna("")
print(df)

打印:

                A  B  C
January    209733  0  0
February   223054  0  0
March      127957  0  0
April       67021  0  0
May                    
June                   
July                   
August                 
September              
October                
November               
December               

【讨论】:

    【解决方案2】:

    首先通过以下方式计算缺失的月份:

    missing_months = [i for i in range(dt.datetime.strptime(df.index[-1], '%B').month+1, 13)]
    

    然后使用 for 循环将它们转换为月份名称,并将其保存在列表中:

    for i in range(len(missing_months)):
        missing_months[i] = dt.date(1900, missing_months[i], 1).strftime('%B')
    

    最后missing_months列表可以在pd.concat中使用。

    【讨论】:

      猜你喜欢
      • 2013-06-24
      • 1970-01-01
      • 2017-07-23
      • 1970-01-01
      • 1970-01-01
      • 2018-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多