如何 select 列名称为日期时间数据类型的数据框中的列?

How to select columns in a dataframe where column names are of datetime dtypes?

我有下面的例子table:

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)

如何 select 特定年份或月份的所有列?

例如,我尝试了 2000 年的以下内容

df.loc[:,'2000']

但是遇到一个关键错误

谢谢!

您可以使用正则表达式 select 列 pandas.DataFrame.filter:

df.filter(regex=('2000.*')) # 2000-01-01, 2000-02-01

如果你想要单行:

>>> 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

如果您的列采用 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])

你也可以尝试所谓的'boolean indexing',我认为它有一个清晰的语法来理解:
df.loc[:,df.columns.str.contains("2000")]

输出:

       2000-01-01  2000-02-01
   0           0           1