【问题标题】:Convert pandas datetime month to string representation将 pandas 日期时间月份转换为字符串表示形式
【发布时间】:2016-06-30 21:01:43
【问题描述】:

我想要一个带有时间戳列的 pandas DataFrame,并希望创建一个仅包含月份的列。我想让月份列带有月份的字符串表示,而不是整数。我做过这样的事情:

df['Dates'] = pd.to_datetime(df['Dates'])
df['Month'] = df.Dates.dt.month
df['Month'] = df.Month.apply(lambda x: datetime.strptime(str(x), '%m').strftime('%b'))

但是,这是一种蛮力方法,性能不是很好。有没有更优雅的方式将月份的整数表示形式转换为字符串表示形式?

【问题讨论】:

    标签: python pandas python-datetime


    【解决方案1】:

    在您的日期时间使用矢量化dt.strftime

    In [43]:
    df = pd.DataFrame({'dates':pd.date_range(dt.datetime(2016,1,1), dt.datetime(2017,2,1), freq='M')})
    df
    
    Out[43]:
            dates
    0  2016-01-31
    1  2016-02-29
    2  2016-03-31
    3  2016-04-30
    4  2016-05-31
    5  2016-06-30
    6  2016-07-31
    7  2016-08-31
    8  2016-09-30
    9  2016-10-31
    10 2016-11-30
    11 2016-12-31
    12 2017-01-31
    
    In [44]:    
    df['month'] = df['dates'].dt.strftime('%b')
    df
    
    Out[44]:
            dates month
    0  2016-01-31   Jan
    1  2016-02-29   Feb
    2  2016-03-31   Mar
    3  2016-04-30   Apr
    4  2016-05-31   May
    5  2016-06-30   Jun
    6  2016-07-31   Jul
    7  2016-08-31   Aug
    8  2016-09-30   Sep
    9  2016-10-31   Oct
    10 2016-11-30   Nov
    11 2016-12-31   Dec
    12 2017-01-31   Jan
    

    【讨论】:

    • 有没有办法将此方法与我在使用df['Dates'] = pd.to_datetime(df['Dates']) 时获得的“日期”列的 np.datetime64 格式一起使用?
    • 当我使用这个解决方案时,我收到以下错误AttributeError: 'DatetimeProperties' object has no attribute 'strftime。有什么想法吗?
    • 好吧,好像我有一个旧的熊猫版本,不支持这种类型的转换。
    • 逆运算怎么样?
    • @famargar 您只需执行pd.to_datetime(df['month'], format='%b') 这将只生成该月份的默认日期时间
    【解决方案2】:

    对于版本pandas 0.23.0+ 可以使用dt.month_name

    df['month'] = df['dates'].dt.month_name()
    print (df)
    
            dates      month
    0  2016-01-31    January
    1  2016-02-29   February
    2  2016-03-31      March
    3  2016-04-30      April
    4  2016-05-31        May
    5  2016-06-30       June
    6  2016-07-31       July
    7  2016-08-31     August
    8  2016-09-30  September
    9  2016-10-31    October
    10 2016-11-30   November
    11 2016-12-31   December
    12 2017-01-31    January
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 2022-07-04
      相关资源
      最近更新 更多