【发布时间】:2019-08-15 08:13:37
【问题描述】:
为了帮助按月对大型数据集进行分类,我尝试将条目的所有实际日期转换为月末。
我看到了与此类似的问题并使用了我找到的代码,但如果日期恰好已经是月底,它似乎不起作用(这将导致计算下个月的月底)。
df['CalcEnd'] = pd.to_datetime(df['ActualDate'], format="%m/%d/%Y") + MonthEnd(1)
这导致:
ActualDate CalcEnd
7/1/2019 7/31/2019
7/2/2019 7/31/2019
7/31/2019 8/31/2019
第三个条目应返回 2019 年 7 月 31 日。
我尝试使用 numpy 仅在日期还不是月底时才使用 CalcEnd 以避免此问题,但由于某种原因,如果还不是月底,CalcEnd 会导致一系列奇怪的数字月。
具体我试过了:
def isMonthEnd(date):
return date + pd.offsets.MonthEnd(0) == date
df['EndCheck'] = isMonthEnd(pd.to_datetime(df['ActualDate'], format="%m/%d/%Y"))
df['CalcEnd'] = pd.to_datetime(df['ActualDate'], format="%m/%d/%Y") + MonthEnd(1)
df['End'] = np.where(df['EndCheck']==False, df['CalcEnd'], df['ActualDate'])
当 EndCheck 为 False 时,不显示 7/31/2019,而是显示 1564531200000000000。
但当它为 True 时,它正确地将 ActualDate 显示为 7/31/2019。
任何建议:
1) 如何将数据框中的所有给定日期转换为月末,即使给定日期已经是月末;和
2) 为什么在尝试使用计算列时 np.where 语句不起作用
.... 将不胜感激!
我能够找到一种解决方法,只需将数据帧写入 csv,然后在创建 End 之前将新的 csv 读回数据帧;它似乎解决了 np.where 语句返回 1564531200000000000 的问题。但是,我希望有一个更优雅的解决方案。
谢谢!
【问题讨论】:
标签: python-3.x pandas numpy