从日期时间

时间:2015-07-29 15:43:00

标签: python pandas indexing dataframe bokeh

主要问题:我设置df索引:df.index = pd.to_datetime(df.index, format='%m/%d/%Y %H:%M')这给了我:

print df.index
<class 'pandas.tseries.index.DatetimeIndex'>
[2014-07-28 09:42:08, ..., 2015-07-28 09:06:12]
Length: 15177, Freq: None, Timezone: None

我想要一个月份和年份的列表,以便使用它们进行绘图,如下所示:["Jan 2015", "Feb 2015", "Mar 2015", "Apr 2015", "May 2015", "June 2015", "Jul 2015", "Aug 2014", "Sep 2014", "Oct 2014", "Nov 2014", "Dec 2014"]

背景:我正在使用一年的数据并使用Bokeh制作图表。 y轴是月份,x轴是CompanyName。我想把这一年添加到月份,虽然这会动态地改变,所以我不想按照我这几个月的方式手动完成。

df = pd.read_csv('MYDATA.csv')
df['recvd_dttm'] = pd.to_datetime(df['recvd_dttm'])

#Only retrieve data before now (ignore typos that are future dates)
mask = df['recvd_dttm'] <= datetime.datetime.now()
df = df.loc[mask]
# get first and last datetime for final week of data

range_max = df['recvd_dttm'].max()
range_min = range_max - pd.DateOffset(years=1)

# take slice with final week of data
df = df[(df['recvd_dttm'] >= range_min) & 
               (df['recvd_dttm'] <= range_max)]
df = df.set_index('recvd_dttm')
df.index = pd.to_datetime(df.index, format='%m/%d/%Y %H:%M')

然后我有代码来提取所需数据并将其格式化为数据透视表以进行绘图。接下来,我做了数字:

MonthNames = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]
p = figure(title="Customer Calls for blank in Last Year", 
    x_range=Companies, y_range=MonthNames,
    x_axis_location="above", plot_width=1200, plot_height=900,
    toolbar_location="left", tools=TOOLS)

我想要["Jan 2015", "Feb 2015", "Mar 2015", "Apr 2015", "May 2015", "June 2015", "Jul 2015", "Aug 2014", "Sep 2014", "Oct 2014", "Nov 2014", "Dec 2014"] 我尝试使用+'%Y'连接到y_range但我得到了TypeError: can only concatenate list (not "str") to list

我很确定解决方法是将df.index放入列表中,然后剪切重复并将其添加到y_range。 我尝试date_list = [set(df.index.year)],但这显然会给[{2014, 2015}]提供帮助。

我不知道怎么做,有人有什么建议吗?

1 个答案:

答案 0 :(得分:0)

尝试类似

的内容
import datetime as dt
import pandas as pd
[dt.datetime.strftime(n,'%b-%Y') for n in pd.DataFrame(yourdataframe).resample('M').index]

我认为它应该返回一个按照您要查找的格式化日期时间列表。

它需要你的索引,每月重新索引到'M'(其他选项可用,例如A =每年,Q =季度等) 然后迭代结果,使用dt.datetime.strftime函数转换它们以获得您所追求的格式。 最后,由于成为列表理解的一部分,所有这些都被包含在列表中。