2017-08-18 2 views
0

Nous venons d'apprendre comment filtrer certains pandas en Python, alors j'ai pensé que j'essaierais cela sur un ensemble de données publiques. (http://data.wa.aemo.com.au/#stem-bids-and-offers)Pandas - Filtrage du texte et des données

J'ai utilisé les données d'août pour cela.

Le défi que je me suis fixé était de filtrer SEULEMENT sur $/MWh> 0 ET cela devait être sur les offres. Nous avons appris comment utiliser np.logical_and filter, mais le problème que j'ai trouvé est que je peux filtrer SOIT sur OR logique numérique. Pas les deux. J'ai une approche qui fonctionne et qui me procure les données et la visualisation que je recherche, mais je suis certain qu'il existe un moyen beaucoup plus efficace de filtrer par champs texte et numérique. Le problème avec mon approche est que cela ne fonctionne que si la taille du personnage est différente. c'est-à-dire si l'on dit Bid ou Fib. Je ramasserais les deux. Je seulement vouloir ramasser offre. Quelqu'un pourrait-il me diriger dans la bonne direction?

Voici mon code:

#Task: I want to filter out ONLY positive $/MWh bids 
#This requires 2 filters - 1 to filter out the $MWh > 0 and 1 to filter by Bids 

# Try converting this to a numpy array and using the filtering mechanisms there 
import numpy as np 
df = pd.read_csv('stem-bids-and-offers-2017-08.csv') 
df.head(5) 
#I don't know how to filter by 'text' just yet so I will have to use another way which is using the len function 
#This will reduce the bid/offer field to characters 

df['boLength'] = df['Bid or Offer'].apply(len) 
df.head(5) 
filtByPriceBid = np.logical_and(df['Price ($/MWh)'] > 0, df['boLength'] == 3) 
filtByPriceBid.head(5) 

df2 = df[filtByPriceBid] 
df2.head(10) 

sns.kdeplot(df2['Price ($/MWh)'], shade=True) 

PS: Je joint le terrain KDE qui est sorti de cela. Si quelqu'un veut fournir une interprétation à ce sujet, n'hésitez pas à le faire! Je m'attendais à une distribution normalisée mais malheureusement, ce n'est pas le cas.

enter image description here

Répondre

0

J'espère que c'est ce que vous recherchez.

Vous pouvez utiliser & d'avoir plusieurs filtres ensemble

sns.kdeplot(df[(df['Price ($/MWh)'] > 0) & (df['Bid or Offer']=='Bid')]['Price ($/MWh)'], shade=True) 
+0

intéressante - pourriez-vous expliquer pourquoi vous avez utilisé le [] [] avec la notation Prix $/MWh dans le second []? – azurekirby

+0

IT peut être désigné par df [conditions] [colonnes] pour plus de facilité. Pandas offre beaucoup de fonctionnalités comme celle-ci. S'il vous plaît se référer à https://pandas.pydata.org/pandas-docs/stable/10min.html –

+0

S'il vous plaît accepter comme réponse si cela a résolu votre problème –