如何选择列在一个数据框架的列名是datetime dtypes?



我有下面的示例表:

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

最新更新