【问题标题】:Pandas convert string to end of month date熊猫将字符串转换为月末日期
【发布时间】:2018-05-26 18:10:48
【问题描述】:

我有这个问题,我的 df 中的 1 列作为字符串输入,但我想在 python 中将其转换为日期月末。例如,

   Id Name    Date  Number
0   1    A  201601       5
1   2    B  201602       6
2   3    C  201603       4

日期列将年份和月份作为字符串。理想情况下,我的目标是:

   Id Name        Date  Number
0   1    A  01/31/2016       5
1   2    B  02/29/2016       6
2   3    C  03/31/2016       4

我可以在 Excel 上使用 Endmonth 和剪切字符串来执行此操作,但是当我在 python 中尝试 pd.to_datetime 时,它​​不起作用。谢谢!

【问题讨论】:

    标签: python pandas date


    【解决方案1】:

    你可以使用PeriodIndex:

    In [36]: df['Date'] = pd.PeriodIndex(df['Date'].astype(str), freq='M').strftime('%m/%d/%Y')
    
    In [37]: df
    Out[37]:
       Id Name        Date  Number
    0   1    A  01/31/2016       5
    1   2    B  02/29/2016       6
    2   3    C  03/31/2016       4
    

    【讨论】:

      【解决方案2】:

      我们可以使用MonthEnd

      from pandas.tseries.offsets import MonthEnd
      df.Date=(pd.to_datetime(df.Date,format='%Y%m')+MonthEnd(1)).dt.strftime('%m/%d/%Y')
      df
      Out[1336]: 
         Id Name        Date  Number
      0   1    A  01/31/2016       5
      1   2    B  02/29/2016       6
      2   3    C  03/31/2016       4
      

      【讨论】:

      • 不错的解决方案! :-)
      • @Wen 运行代码时出现此错误:int() 参数必须是字符串、类似字节的对象或数字,而不是 'NoneType' 并且输出是 NaT 是因为我的输入仍然是字符串?
      • @TylerNG df.Date=(pd.to_datetime(df.Date.astype(str),format='%Y%m')+MonthEnd(1)).dt.strftime('%m/%d/%Y')
      • @TylerNG 错误来自 int ,你的 df.Date.dtype 应该是 int ,转换为 str 后,你应该没问题
      • @TylerNG yw 快乐编码
      猜你喜欢
      • 2021-12-06
      • 2017-12-12
      • 2017-09-17
      • 2017-05-20
      • 1970-01-01
      • 2021-07-28
      • 2016-03-24
      • 2017-06-05
      • 2020-08-02
      相关资源
      最近更新 更多