所以我的代码如下:
df['Dates'][df['Dates'].index.month == 11]
我正在做一个测试,看看我是否可以过滤几个月,所以它只显示11月的日期,但这不起作用。它给了我以下错误:AttributeError:' Int64Index'对象没有属性' month'。
如果我这样做
print type(df['Dates'][0])
然后我得到了课程' pandas.tslib.Timestamp',这让我相信存储在数据框中的对象类型是Timestamp对象。 (我不确定' Int64Index'来自哪里......以前的错误)
我想要做的是:数据框列包含2000年初的日期,以下列格式显示:dd / mm / yyyy。我想仅在11月15日到3月15日期间过滤日期,与年份无关。最简单的方法是什么?
感谢。
这是df ['日期'](带索引):
0 2006-01-01
1 2006-01-02
2 2006-01-03
3 2006-01-04
4 2006-01-05
5 2006-01-06
6 2006-01-07
7 2006-01-08
8 2006-01-09
9 2006-01-10
10 2006-01-11
11 2006-01-12
12 2006-01-13
13 2006-01-14
14 2006-01-15
...
答案 0 :(得分:14)
映射匿名函数以计算系列的月份,并将其与nov的11进行比较。 这将给你一个布尔掩码。然后,您可以使用该掩码过滤数据帧。
nov_mask = df['Dates'].map(lambda x: x.month) == 11
df[nov_mask]
我不认为有直接的方法来过滤你想忽略年份的方式所以试试这个。
nov_mar_series = pd.Series(pd.date_range("2013-11-15", "2014-03-15"))
#create timestamp without year
nov_mar_no_year = nov_mar_series.map(lambda x: x.strftime("%m-%d"))
#add a yearless timestamp to the dataframe
df["no_year"] = df['Date'].map(lambda x: x.strftime("%m-%d"))
no_year_mask = df['no_year'].isin(nov_mar_no_year)
df[no_year_mask]
答案 1 :(得分:10)
pd.to_datetime
和dt
访问器 2020 answer
公认的答案不是解决此问题的“熊猫”方式。
要仅选择带有month 11
的行,请使用dt
访问器:
# df['Date'] = pd.to_datetime(df['Date']) -- if column is not datetime yet
df = df[df['Date'].dt.month == 11]
相同的软件可以工作几天或几年,您可以用dt.month
或dt.day
代替dt.year
除此之外,还有更多:
dt.quarter
dt.week
dt.weekday
dt.day_name
dt.is_month_end
dt.is_month_start
dt.is_year_end
dt.is_year_start
答案 2 :(得分:0)
在您的代码中有两个问题。首先,过滤条件后需要带列参考。其次,可以对列或索引使用“ .month”,但不能同时使用。以下其中一项应该起作用:
df[df.index.month == 11]['Dates']
df[df['Dates'].month == 11]['Dates']