【问题标题】:Extract month data from pandas Dataframe从 pandas Dataframe 中提取月份数据
【发布时间】:2019-04-25 01:14:43
【问题描述】:

我最初有字符串格式的日期。 我想从这些日期中提取月份作为数字。

df = pd.DataFrame({'Date':['2011/11/2', '2011/12/20', '2011/8/16']})

我将它们转换为 pandas 日期时间对象。

df['Date'] = pd.to_datetime(df['Date'])

然后我想提取所有月份。

当我尝试时:

df.loc[0]["Date"].month

这可以返回正确的值 11。

但是当我尝试调用多个月时它不起作用?

df.loc[1:2]["Date"].month

AttributeError: 'Series' object has no attribute 'month'

【问题讨论】:

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


    【解决方案1】:

    df.loc[0]["Date"] 返回一个标量:pd.Timestamp 对象有一个 month 属性,这是您正在访问的。

    df.loc[1:2]["Date"] 返回一个系列:pd.Series 对象确实具有month 属性,如果df['Date'] 是,它们确实具有dt.month 属性datetime 系列。

    另外,don't use chained indexing。您可以使用:

    df.loc[0, 'Date'].month 用于标量

    df.loc[1:2, 'Date'].dt.month 一个系列

    【讨论】:

      【解决方案2】:

      有不同的功能。 pandas.Series.dt.month 用于转换 Series 填充 datetimespandas.Timestamp 用于转换标量。对于转换Index 是函数pandas.DatetimeIndex.month,没有.dt

      所以需要:

      #Series
      df.loc[1:2, "Date"].dt.month
      
      #scalar
      df.loc[0, 'Date'].month
      
      #DatetimeIndex
      df.set_index('Date').month
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-18
        • 2019-06-04
        • 1970-01-01
        • 1970-01-01
        • 2019-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多