我的熊猫数据框中有一个日期列,我先将其转换为日期时间,然后提取年份:
data[date] = pd.to_datetime(data[date])
data['year'] = pd.PeriodIndex(data[date], freq='A')
我想根据年份将其作为子集,例如:
if data['year'] ==2015
但是以某种方式不起作用。有人知道为什么吗?
答案 0 :(得分:2)
有两种基本方法可以解决这个问题。
如果您想创建一个名为year
的新列来解决此问题,则可以从date列中提取年份并创建year
列,您可以在其中进行loc
并获得所需的结果。
可以这样做。
data['date'] = pd.to_datetime(data['date'])
data['year'] = data['date'].dt.year
data.loc[data.year == 2015, :]
如果您不想为解决此问题而单独创建一列,则可以直接从loc
上的日期功能访问年份。可以这样做。
data['date'] = pd.to_datetime(data['date'])
data.loc[data.date.dt.year == 2015, :]
答案 1 :(得分:1)
如果您要从数据框中获取year
等于2015
的所有行,则正确的pandas语法应为:
data[data['year'] == 2015]
OR
data[data.year == 2015]
year
列的类型为int
。您可能会忘记将year
转换为int
,在这种情况下,很可能是str
。在这种情况下,请使用:
data[data['year'] == '2015']
OR
data[data.year == 2015]
或者,如果只需要年份为2015的子集而无需年份列,则可以。
data[pd.DatetimeIndex(data['Date']).year == 2015]