Gibt es eine Möglichkeit, einen DataFrame-Index (Zeile) basierend auf übereinstimmendem Text innerhalb des Datenrahmens anzugeben?Python Pandas: Index basierend auf Wert in DataFrame finden
Ich importiere täglich eine Textdatei aus dem Internet here in einen Python Pandas DataFrame. Ich analysiere nur einige der Daten und führe Berechnungen durch, um mir den Spitzenwert für jeden Tag zu geben. Die spezifische Gruppe von Daten, die ich sammeln muss, beginnt mit dem Abschnitt "RTO KOMBINIERTE STUNDE INTEGRIERTE PROGNOSE LADEN MW".
Ich brauche nur einen Teil der Daten, um die Berechnungen auszuführen, die ich brauche, und ich kann manuell angeben, mit welcher Indexzeile ich anfangen soll. Aber täglich kann sich diese Zahl ändern, weil Text oben in der Datei hinzugefügt wird von den Autoren.
Updated as of: 05-05-2016 1700 Constrained operations ARE expected in the AEP, APS, BC, COMED, DOM,and PS zones on 05-06-2016. Constrained operations ARE expected in the AEP, APS, BC, COMED, DOM,and PS zones on 05-07-2016. The PS/ConEd 600/400 MW contract will be limited to 700MW on 05-06-16.
Gibt es eine Möglichkeit, Text im Pandas DataFrame zu vergleichen und den Index dieser Übereinstimmung anzugeben? Momentan gebe ich manuell den Index an, mit dem ich beginnen möchte, indem ich die Variable 'Tag' unten in der 6. Zeile benutze. Ich möchte, dass diese Variable den Index (Zeile) des Datenrahmens enthält, der den Text enthält, den ich abgleichen möchte.
Der folgende Code funktioniert, aber kann aufhören zu arbeiten, wenn die Zeilennummer (Index) Änderungen:
def forecastload():
wb = load_workbook(filename = 'pjmactualload.xlsx')
ws = wb['PJM Load']
printRow = 13
#put this in iteration to pull 2 rows of data at a time (one for each day) for 7 days max
day = 239
while day < 251:
#pulls in first day only
data = pd.read_csv("http://oasis.pjm.com/doc/projload.txt", skiprows=day, delim_whitespace=True, header=None, nrows=2)
#sets data at HE 24 = to data that is in HE 13- so I can delete column 0 data to allow checking 'max'
data.at[1,13]= data.at[1,1]
#get date for printing it with max load later on
newDate = str(data.at[0,0])
#now delete first column to get rid of date data. date already saved as newDate
data = data.drop(0,1)
data = data.drop(1,1)
#pull out max value of day
#add index to this for iteration ie dayMax[x] = data.values.max()
dayMax = data.max().max()
dayMin = data.min().min()
#print date and max load for that date
actualMax = "Forecast Max"
actualMin = "Forecast Min"
dayMax = int(dayMax)
maxResults = [str(newDate),int(dayMax),actualMax,dayMin,actualMin]
d = 1
for items in maxResults:
ws.cell(row=printRow, column=d).value = items
d += 1
printRow += 1
#print maxResults
#l.writerows(maxResults)
day = day + 2
wb.save('pjmactualload.xlsx')
Ausgezeichnet, vielen Dank. Das ist die Art von Output, für die ich gedreht habe, aber ich hatte keine Ahnung, wie ich dahin kommen sollte. Ich habe nur von sed und awk gehört und werde dieses Wochenende einige Zeit mit ihnen verbringen. Danke noch einmal. – JLK
Während ich das durchführe, gibt die folgende Zeile einen Fehler aus, wenn ich renne: 'df.index = pd.to_datetime (df.apply (Lambda x:" {Datum} {Stunde}: 00 {Periode} ". Format (** x), axis = 1)) 'Der Fehler ist:' KeyError: ('Datum', u'curced bei Index 0 ') ' – JLK
Gern geschehen. Die Befehlszeile ist ein sehr mächtiges Werkzeug und bietet oft die einfachste Lösung. Oh, was für einen Fehler hast du? –