Как настроить индекс в выводе tmy_data из функции iotools.read_tmy3. Как я исправил проблему, если у других возникла такая же проблема? - PullRequest
1 голос
/ 02 мая 2019

Вместо вопроса, это скорее мой обходной путь для проблемы, с которой я столкнулся при чтении файлов tmy3. Я надеюсь, что это может быть полезно для некоторых из вас. Я все еще новичок, когда дело доходит до кодирования и Python, поэтому могут быть более простые способы.

ПРОБЛЕМА

После использования функции iotools.read_tmy3 () я следовал примерам и коду, обрисованному другими. Это включало: 1. Чтение файла данных tmy3; 2. Принуждение к 2015 году (или любой другой год, который вам нравится); а также, 3. Смещение моего индекса на 30 минут в соответствии с имитацией солнечного излучения.

Код, который я использовал:

tmy_data, metadata = pvlib.iotools.read_tmy3(datapath, coerce_year=2015)
tmy_data = tmy_data.shift(freq='-30Min') ['2015']
tmy_data.index.name = 'Time

Используя этот код, вы теряете последнюю строку вашего DataFrame. Это решается удалением ['2015'] во второй строке, но это решает окончательную дату в 2014 году. Для моей работы мне нужен был окончательный индекс, чтобы оставаться последовательным.

ЧТО Я ПОПЫТАЛ

  1. Я попытался сместить индекс последней строки безуспешно, используя метод shift .
  2. Я попытался переиндексировать, установив индекс последней строки равным требуемому DatetimeIndex.
  3. Я попытался удалить данные часового пояса из индекса, изменить индекс, а затем повторно применить данные часового пояса. Все это было слишком сложно и не помогло решить мою проблему.

Что сработало для меня

Код того, что я сделал, показан ниже. Это были мои шаги: 1. Определите индекс из моей последней строки и скопируйте его данные; 2. Удалите последнюю строку моего DataFrame tmy_data; 3. Создайте новый фрейм данных со смещенной датой и скопированными данными; а также, 4. Добавьте строку в мой фрейм данных tmy_data

Это немного утомительно, но это легко исправить при чтении нескольких файлов tmy3 с несколькими часовыми поясами.

#Remove the specific year from line 2 in the code above
tmy_data = tmy_data.shift(freq='-30Min')

#Identify the last row, and copy the data
last_date = tmy_data.iloc[[-1]].index

copied_data = tmy_data.iloc[[-1]]
copied_data = copied_data.to_dict(orient='list')

#Drop the row with the incorrect index
tmy_data.drop([last_date][0], inplace = True)

#Shift the date of the last date
last_date = last_date.shift(n = 1, freq = 'A')

#Create a new DataFrame with the shifted date and copied data
last_row = pd.DataFrame(data = copied_data, 
                        index=[last_date][0])

tmy_data = tmy_data.append(last_row)

После этого мои последние значения:

2015-01-01 00:30:00-05:00
....
2015-12-31 22:30:00-05:00
2015-12-31 23:30:00-05:00

Таким образом, DataFrame содержит 8760 строк, а не 8759, как в предыдущем методе.

Надеюсь, это поможет другим!

...