我有下面的示例表:
cols = ['2000-01-01', '2000-02-01', '2001-03-01', '2001-04-01', '2002-05-01']
vals = np.arange(5)
df = pd.DataFrame(data=[vals], columns=cols)
df.columns = pd.to_datetime(df.columns)
如何选择特定年份或月份的所有列?
作为一个例子,我为2000年尝试了以下操作
df.loc[:,'2000']
但是得到一个键错误
谢谢!
如果你想要单行:
>>> df.loc[0, '2000']
2000-01-01 0
2000-02-01 1
Name: 0, dtype: int64
如果您想要多行:
>>> df
2000-01-01 2000-02-01 2001-03-01 2001-04-01 2002-05-01
0 0 1 2 3 4
1 0 1 2 3 4
>>> df.T['2000'].T
2000-01-01 2000-02-01
0 0 1
1 0 1
或者使用精确索引:
>>> df.loc[:, datetime.datetime(2000, 1, 1): datetime.datetime(2000, 12, 31)]
2000-01-01 2000-02-01
0 0 1
1 0 1
您可以使用pandas. datafframe .filter:
使用正则表达式选择列df.filter(regex=('2000.*')) # 2000-01-01, 2000-02-01
如果您的列是Timestamp
格式:
df[[c for c in df.columns if c.year == 2000]]
这是示例中包含数据的输出:
2000-01-01 2000-02-01
0 0 1
使用.loc
并创建一个时间戳对象用于比较布尔值
df.loc[:,df.columns > pd.Timestamp('01 Jan 2000')]
2000-02-01 2001-03-01 2001-04-01 2002-05-01
0 1 2 3 4
df.columns > pd.Timestamp('01 Jan 2000')
array([False, True, True, True, True])
你也可以尝试所谓的'布尔索引',我认为它有一个清晰的语法理解:df.loc[:,df.columns.str.contains("2000")]
输出:
2000-01-01 2000-02-01
0 0 1