【问题标题】:how to change datetimeindex to just contain date in python如何将datetimeindex更改为仅包含python中的日期
【发布时间】:2021-08-16 10:15:15
【问题描述】:

我有一个名为 date 的列,其中包含此值

> DatetimeIndex(['2014-02-19'], dtype='datetime64[ns]', freq=None)
> DatetimeIndex(['2013-02-29'], dtype='datetime64[ns]', freq=None)
> DatetimeIndex(['2018-04-15'], dtype='datetime64[ns]', freq=None)

如何修改列以仅提取日期值并删除 DatetimeIndex 和括号等单词?

> 2014-02-19
> 2013-02-19
> 2018-04-15
 

我写的代码我认为很不正确,但仍然附在此处:

def fundate(x):
    return x[0][0]

df['date'] = df.apply(lambda row : fundate(row['date']), axis = 1)

有人可以帮帮我吗?

【问题讨论】:

标签: python python-3.x pandas datetime strptime


【解决方案1】:

你的意思是这样的吗(未经测试)?

def fundate(x):
    return x.strftime("%Y-%m-%d")

来自https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.dt.strftime.html

【讨论】:

    【解决方案2】:

    我想这就是你想要的。它从索引中选择第一项并将其更改为字符串。

    df['new_column'] = df['date'].apply(lambda x: x[0].strftime("%Y-%m-%d"))
    

    【讨论】:

      【解决方案3】:

      如果有对象 DatetimeIndex 使用:

      df['date'] = df['date'].str[0]
      

      如果每行有多个值:

      df = df.explode('date')
      

      如果有字符串且每行只有一个值:

      df["date"] = df["date"].str.extract(r"(\d{4}-\d{2}-\d{2})", expand=False)
      

      如果可能,每行的多个值:

      df["date"] = df["date"].str.findall(r"(\d{4}-\d{2}-\d{2})")
      df = df.explode('date')
      

      【讨论】:

        【解决方案4】:

        我们正在使用正则表达式来获取输入字符串的square brackets 之间的日期元素。

        如果需要在 object/str 中输出

        df.date = df["date"].str.extract('\[(.*?)]', expand=True).replace("'","", regex=True)
        

        输出

            date
        0   2014-02-19
        1   2013-02-28
        2   2018-04-15
        

        输出类型

        df.info()
        
        <class 'pandas.core.frame.DataFrame'>
        RangeIndex: 3 entries, 0 to 2
        Data columns (total 1 columns):
         #   Column  Non-Null Count  Dtype 
        ---  ------  --------------  ----- 
         0   date    3 non-null      object
        dtypes: object(1)
        memory usage: 152.0+ bytes
        

        如果需要输出为日期时间类型

        df.date = df["date"].str.extract('\[(.*?)]', expand=True).replace("'","", regex=True)
        df.date = pd.to_datetime(df.date)
        df
        

        输出

            date
        0   2014-02-19
        1   2013-02-28
        2   2018-04-15
        

        输出类型

        df.info()
        <class 'pandas.core.frame.DataFrame'>
        RangeIndex: 3 entries, 0 to 2
        Data columns (total 1 columns):
         #   Column  Non-Null Count  Dtype         
        ---  ------  --------------  -----         
         0   date    3 non-null      datetime64[ns]
        dtypes: datetime64[ns](1)
        memory usage: 152.0 bytes
        

        输入 DF

        df = pd.DataFrame({
            'date':["DatetimeIndex(['2014-02-19'], dtype='datetime64[ns]', freq=None)",
        "DatetimeIndex(['2013-02-28'], dtype='datetime64[ns]', freq=None)",
        "DatetimeIndex(['2018-04-15'], dtype='datetime64[ns]', freq=None)"]
        })
        
        df
        

        【讨论】:

          【解决方案5】:

          你可以这样做:

          import pandas as pd
          import datetime as dt
          rng = pd.date_range('2015-02-24', periods=5, freq='T')
          df = pd.DataFrame({ 'date': rng })
              
          df['date'] = df['date'].dt.strftime("%Y-%m-%d")
          

          将 dtype datetime64ns 的 pd.Series 转换为字符串

          如果您想将该 pd.Series 转换为列表,您可以这样做:

          datelist = df['date'].tolist()
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-09-16
            • 1970-01-01
            • 2012-05-14
            • 2018-02-07
            • 2016-09-16
            • 2021-10-16
            • 2016-11-23
            相关资源
            最近更新 更多