如何 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
我有下面的例子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