我遇到了Pandas,Python的问题。我有几行具有不同的日期,其中日期是字符串
"2016-02-28" ABC123
"2016-02-29" CDE345
"2016-03-30" FGH567
"2016-03-31" XYZ235
...
在这里,我们看到feb有两个不同的日子,28和29.我只对这个月感兴趣。因此,我希望这些行具有相同的日期,如下所示:
"2016-02-29" ABC123
"2016-02-29" CDE345
"2016-03-31" FGH567
"2016-03-31" XYZ235
...
他们得到的日子并不重要,只要它是同一天,但最后一天更可取。我不能截断,只能保持" 2016-02"因为我后来需要这一天。如果它变得更容易,我可以将其转换为时间戳。
df ["DATE"] = pandas.to_datetime (df ["DATE"])
(另一个问题,为什么这行将DATE列转换为Timestamp而不是datetime?它说要转换为datetime,而是变成Timestamp?)
我试图重新取样,但无济于事。我不想像以前那样通过剪切和粘贴字符串来手动执行此操作。应该有一个更优雅的解决方案吗?
答案 0 :(得分:2)
使用MonthEnd
偏移量:
df["DATE"] = pd.to_datetime (df["DATE"]) + pd.offsets.MonthEnd(0)
print (df)
DATE COL
0 2016-02-29 ABC123
1 2016-02-29 CDE345
2 2016-03-31 FGH567
3 2016-03-31 XYZ235
如果真正重要的DataFrame和性能很重要:
df['DATE'] = pd.to_datetime(df["DATE"]).values.astype('datetime64[M]') + \
np.array([1], dtype='timedelta64[M]') - \
np.array([1], dtype='timedelta64[D]')
print (df)
DATE COL
0 2016-02-29 ABC123
1 2016-02-29 CDE345
2 2016-03-31 FGH567
3 2016-03-31 XYZ235
(另一个问题,为什么这一行将DATE列转换为 时间戳而不是日期时间?它说要转换为datetime,但是 相反,它变成了时间戳?)
如果您看到文档here,则说明:
TimeStamp是与python的Datetime等效的熊猫 在大多数情况下可以与它互换。它是用于的类型 组成DatetimeIndex的条目,以及其他面向时间序列的条目 大熊猫中的数据结构。
答案 1 :(得分:0)
或者我们使用to_period
df.index=df.index.to_period('M').to_timestamp('M')
df
Out[16]:
A
2016-02-29 ABC123
2016-02-29 CDE345
2016-03-31 FGH567
2016-03-31 XYZ235