Pandas:删除等于周末的列
Pandas: Drop Columns that are equal to weekend
我有一个可能相当简单的问题。我有 10 年的每日 df,其中包含具有数据并根据日期命名的列:
2017-04-07 2017-04-08 2017-04-09
a a a
我现在想删除名称(即哪一天)等于周末的每一列。例如,在上面的例子中,只有这个会保留:
2017-04-07
a
有人知道怎么做吗?
对 select 所有非 (~
) 工作日的列使用 weekday
+ isin
for mask with loc
and boolean indexing
:
print (df)
2017-04-07 2017-04-08 2017-04-09 2017-04-10
0 a a a a
#if necessary
df.columns = pd.to_datetime(df.columns)
print (~df.columns.weekday.isin([5,6]))
[ True False False True]
print (df.loc[:, ~df.columns.weekday.isin([5,6])])
2017-04-07 2017-04-10
0 a a
另一个解决方案:
df.columns = pd.to_datetime(df.columns)
print (df[df.columns[~df.columns.weekday.isin([5,6])]])
2017-04-07 2017-04-10
0 a a
对于 pandas 的旧版本,请使用:
print (df[df.columns[~pd.Series(df.columns.weekday).isin([5,6])]])
2017-04-07 2017-04-10
0 a a
或:
print (df[df.columns[np.in1d(df.columns.weekday, [5,6])]])
2017-04-08 2017-04-09
0 a a
我有一个可能相当简单的问题。我有 10 年的每日 df,其中包含具有数据并根据日期命名的列:
2017-04-07 2017-04-08 2017-04-09
a a a
我现在想删除名称(即哪一天)等于周末的每一列。例如,在上面的例子中,只有这个会保留:
2017-04-07
a
有人知道怎么做吗?
对 select 所有非 (~
) 工作日的列使用 weekday
+ isin
for mask with loc
and boolean indexing
:
print (df)
2017-04-07 2017-04-08 2017-04-09 2017-04-10
0 a a a a
#if necessary
df.columns = pd.to_datetime(df.columns)
print (~df.columns.weekday.isin([5,6]))
[ True False False True]
print (df.loc[:, ~df.columns.weekday.isin([5,6])])
2017-04-07 2017-04-10
0 a a
另一个解决方案:
df.columns = pd.to_datetime(df.columns)
print (df[df.columns[~df.columns.weekday.isin([5,6])]])
2017-04-07 2017-04-10
0 a a
对于 pandas 的旧版本,请使用:
print (df[df.columns[~pd.Series(df.columns.weekday).isin([5,6])]])
2017-04-07 2017-04-10
0 a a
或:
print (df[df.columns[np.in1d(df.columns.weekday, [5,6])]])
2017-04-08 2017-04-09
0 a a