根据日期子集熊猫数据框

时间:2018-10-20 04:41:44

标签: python pandas

我的熊猫数据框中有一个日期列,我先将其转换为日期时间,然后提取年份:

data[date]      = pd.to_datetime(data[date])
data['year'] = pd.PeriodIndex(data[date], freq='A')

我想根据年份将其作为子集,例如:

 if data['year'] ==2015

但是以某种方式不起作用。有人知道为什么吗?

2 个答案:

答案 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]