【问题标题】:How to change dates in column?如何更改列中的日期?
【发布时间】:2018-05-06 08:45:36
【问题描述】:

我对 Pandas、Python 有疑问。我有几行不同的日期,其中日期是字符串

"2016-02-28"   ABC123
"2016-02-29"   CDE345
"2016-03-30"   FGH567
"2016-03-31"   XYZ235
...

在这里我们看到 2 月有两个不同的日子,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?)

我尝试重新采样,但无济于事。我不想像之前所做的那样通过剪切和粘贴字符串来手动执行此操作。应该有更优雅的解决方案?

【问题讨论】:

    标签: python pandas datetime timestamp


    【解决方案1】:

    使用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 列转换为 时间戳而不是日期时间?它说要转换为日期时间,但是 而是变成时间戳?)

    如果您看到文档 here 它会说:

    TimeStamp 是 python 的 Datetime 的 pandas 等价物,是 在大多数情况下可以与它互换。它是用于 构成 DatetimeIndex 和其他时间序列的条目 pandas 中的数据结构。

    【讨论】:

    • @Bharath - 谢谢。
    【解决方案2】:

    或者我们使用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
    

    【讨论】:

    • 感谢您的解决方案,但是,您的解决方案假定 Period 是索引。我不想更改我的索引,所以我选择了其他解决方案,因为它更适用于我的问题。但无论如何,谢谢! :)
    猜你喜欢
    • 2015-04-15
    • 1970-01-01
    • 2015-01-06
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多