2017-06-20 4 views
2

J'ai une question probablement plutôt simple. J'ai df par jour pendant 10 ans, comprenant des colonnes qui contiennent des données et sont nommées en fonction du jour:Pandas: Drop Columns qui sont égales à week-end

2017-04-07  2017-04-08  2017-04-09 
    a    a    a 

Je veux maintenant laisser tomber chaque colonne dont le nom, à savoir quel jour, est égal à un week-end. Par exemple, dans l'exemple ci-dessus seulement cela resterait:

2017-04-07  
    a    

Est-ce que quelqu'un sait comment faire cela?

Répondre

2

utilisation weekday + isin pour masque avec loc et boolean indexing pour sélectionner toutes les colonnes qui ne sont pas (~) en semaine:

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 

Une autre solution:

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 

Pour plus verison de pandas géants utiliser:

print (df[df.columns[~pd.Series(df.columns.weekday).isin([5,6])]]) 
    2017-04-07 2017-04-10 
0   a   a 

Ou:

print (df[df.columns[np.in1d(df.columns.weekday, [5,6])]]) 
    2017-04-08 2017-04-09 
0   a   a 
+0

Merci! Ça à l'air bon. Je reçois l'erreur suivante: AttributeError: l'objet 'numpy.ndarray' n'a aucun attribut 'isin' –

+0

Il y a un problème ne pas utiliser la dernière version des pandas, obtenez-moi une seconde. – jezrael

+0

Désolé, mais maintenant j'obtiens cette erreur: AttributeError: L'objet 'Index' n'a pas d'attribut 'jour de la semaine' –