返回特定月份和年份的python熊猫的df行OutOfBoundsDatetime:超出范围的纳秒级时间戳:1-01-01 00:00:00

时间:2020-01-01 19:45:50

标签: python pandas date datetime stringindexoutofbounds

我正在尝试创建一个函数,该函数将返回仅与特定月份和年份有关的行:

df

order_date      Type
2015-01-01      A
2017-09-01      A
2016-12-19      C
2019-11-23      D
2018-10-29      B
2017-12-31      B
2015-11-30      A
2015-08-30      B
2015-09-24      D
2015-01-27      E

定义功能

def return_data_month_year(month, year):
    month = pd.to_datetime(month).month()
    year = pd.to_datetime(year).year()
    df = df[((df['order_date']).dt.strftime('%B') == month)&((df['order_date']).dt.strftime('%Y') == 
    year)]
    return df

呼叫功能

  return_data_month_year('Jan','2015')

预期输出:

order_date      Type
2015-01-01      A
2015-01-27      E

我遇到错误(输出):

   OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 1-01-01 00:00:00

1 个答案:

答案 0 :(得分:1)

您不必致电month = pd.to_datetime(month).month()year = pd.to_datetime(year).year()

'%B'返回完整的月份名称,例如。 January。要仅返回缩写(JanFeb,...),请使用%b

def return_data_month_year(df, month, year):
    return df[((df['order_date']).dt.strftime('%b') == month)&((df['order_date']).dt.strftime('%Y') == year)]

# to convert column 'order_date' to datetime:
df['order_date'] = pd.to_datetime( df['order_date'] )

print( return_data_month_year(df, 'Jan','2015') )

打印:

  order_date Type
0 2015-01-01    A
9 2015-01-27    E