Есть ли способ указать индекс DataFrame (строка) на основе совпадающего текста внутри фрейма данных?Python Pandas: найдите индекс, основанный на значении в DataFrame
Я импортирую текстовый файл из Интернета, который находится here каждый день в python pandas DataFrame. Я разбираю только некоторые данные и делаю вычисления, чтобы дать мне пиковое значение для каждого дня. Конкретную группу данных, которую мне нужно собрать, начинается с раздела, озаглавленного «КОМБИНИРОВАННЫЙ ЧАС RTO, ЗАВЕРШИВШИЙ ИНТЕГРИРОВАННЫЙ ПРОГНОЗ ЗАГРУЗКИ MW».
Мне нужно только использовать часть данных для выполнения необходимых мне вычислений, и я могу вручную указать, с какой строки индекса начать, но ежедневно это число может измениться из-за текста, добавленного в верхнюю часть файла авторами.
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.
Есть ли способ сопоставить текст в pandas DataFrame и указать индекс этого соответствия? В настоящее время я вручную указываю индекс, который хочу начать с использования переменной «день» ниже на 6-й строке. Я бы хотел, чтобы эта переменная удерживала индекс (строку) кадра данных, который включает текст, который я хочу сопоставить.
ниже код работает, но может перестать работать, если номер строки (индекс) изменения:
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')
Отлично, спасибо. Это то, что я снимал, но понятия не имел, как туда добраться. Я только слышал о sed и awk и буду проводить с ними некоторое время в эти выходные. Еще раз спасибо. – JLK
Как я это понимаю, следующая строка бросает ошибку при запуске: 'df.index = pd.to_datetime (df.apply (lambda x:" {date} {hour}: 00 {period} ". Format (** x), axis = 1)) 'Ошибка:' KeyError: ('date', u'occurred at index 0 ') ' – JLK
Добро пожаловать. Командная строка - очень мощный инструмент и часто обеспечивает самое простое решение. О, какая у вас ошибка? –