Я пытался создать вектор времени в python 3.x, чтобы построить график зависимости скорости ветра от времени.
Скорость ветра замерялась каждые 5 минут, начиная с 00:00 и заканчивая 23:55 (т. е. 288 замеров в день).
Я использую pandas для чтения данных. Я храню переменные скорости в векторе numpy. Я сохранил переменные, используя numpy.array(met1.loc[ini:fin, 'm/s Wind']), и они идеально подходят для скорости ветра. Когда я попытался сделать это для datetime переменных, as numpy.array(met1.loc[ini:fin, 'Measurement Time']) показал мне следующую ошибку:
'the label [Measurement Time] is not in the [columns]' (подробности см. в коде)
met1.head() выглядит так:
. m/s Wind m/s Gusts ° Direction RH °C Temp \
Measurement Time
2018-11-13 11:20:00 6.77 9.5 268 0.068590 12.6
2018-11-13 11:25:00 6.90 10.4 284 0.067255 12.9
2018-11-13 11:30:00 6.59 11.3 279 0.066381 13.1
2018-11-13 11:35:00 7.10 10.1 279 0.073019 13.1
2018-11-13 11:40:00 6.01 9.8 273 0.073498 13.0
Код выглядит так:
import numpy as np
import pandas as pd
met1 = pd.read_excel('database.xls', sheet_name=0, skiprows=2, index_col = 'Measurement Time', parse_dates=[0]) #reading data base
def variables (ini, fin):
# Variables for MET-1
wind1 = np.array(met1.loc[ini:fin, 'm/s Wind'])
dir1 = np.array(met1.loc[ini:fin, '° Direction'])
rh1 = np.array(met1.loc[ini:fin, 'RH']) # 0.123
temp1 = np.array(met1.loc[ini:fin, '°C Temp'])
p1 = np.array(met1.loc[ini:fin, 'kPa Pressure'])
tiempo = np.array(met1.loc[ini:fin, 'Measurement Time'])
print(wind1)
print(tiempo)
variables('2018-11-15','2018-11-15')
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
~/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py in _validate_key(self, key, axis)
1789 if not ax.contains(key):
-> 1790 error()
1791 except TypeError as e:
~/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py in error()
1784 .format(key=key,
-> 1785 axis=self.obj._get_axis_name(axis)))
1786
KeyError: 'the label [Measurement Time] is not in the [columns]'
During handling of the above exception, another exception occurred:
KeyError Traceback (most recent call last)
<ipython-input-182-130dc8c7095b> in <module>
1 # variables('2018-11-13','2018-11-13') # Mount day
2 # variables('2018-11-14','2018-11-14') # Mount day
----> 3 variables('2018-11-15','2018-11-15')
4 variables('2018-11-16','2018-11-16')
5 variables('2018-11-17','2018-11-17')
<ipython-input-181-2a7e1e919435> in variables(ini, fin)
17 temp1 = np.array(met1.loc[ini:fin, '°C Temp'])
18 p1 = np.array(met1.loc[ini:fin, 'kPa Pressure'])
---> 19 tiempo = np.array(met1.loc[ini:fin, 'Measurement Time'])
20 print(tiempo)
21
~/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py in __getitem__(self, key)
1470 except (KeyError, IndexError):
1471 pass
-> 1472 return self._getitem_tuple(key)
1473 else:
1474 # we by definition only have the 0th axis
~/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py in _getitem_tuple(self, tup)
868 def _getitem_tuple(self, tup):
869 try:
--> 870 return self._getitem_lowerdim(tup)
871 except IndexingError:
872 pass
~/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py in _getitem_lowerdim(self, tup)
996 for i, key in enumerate(tup):
997 if is_label_like(key) or isinstance(key, tuple):
--> 998 section = self._getitem_axis(key, axis=i)
999
1000 # we have yielded a scalar ?
~/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py in _getitem_axis(self, key, axis)
1909
1910 # fall thru to straight lookup
-> 1911 self._validate_key(key, axis)
1912 return self._get_label(key, axis=axis)
1913
~/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py in _validate_key(self, key, axis)
1796 raise
1797 except:
-> 1798 error()
1799
1800 def _is_scalar_access(self, key):
~/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py in error()
1783 raise KeyError(u"the label [{key}] is not in the [{axis}]"
1784 .format(key=key,
-> 1785 axis=self.obj._get_axis_name(axis)))
1786
1787 try:
KeyError: 'the label [Measurement Time] is not in the [columns]'
Временной вектор, который мне нужен, должен выглядеть так!!!:['00:00' '00:05' ..... '23:50' '23:55'] на дату '2018-11-15'
Спасибо за Ваш ответ. Я добавляю голову базы данных. Я попытался сохранить переменную как tiempo = np.array(met1.loc[ini:fin, 'Measurement Time']), но когда я print(tiempo) показал следующую ошибку: 'the label [Measurement Time] is not in the [columns]'
А что именно не работает?
Если вы храните время измерения в строках Python, вы можете просто обрезать их срезами: datetime = datetime[:-3]
@juanpa.arrivillaga Когда я print(wind1) верну numpy вектор с величиной скорости на 15 ноября 2018 года. Возможно, index_col при импорте базы данных возникает эта проблема, но если я изменю index_col, весь мой код не будет работать. Поэтому я не знаю, как создать вектор времени, чтобы построить график зависимости скорости ветра (wind1) от времени в формате HH:MM.
отлично! Грасиас @juanpa.arrivillaga
Вы сделали столбец «Время измерения» своим индексом, вы больше не можете использовать его как столбец. Попробуйте просто met1.loc[ini:fin].index.values






Пожалуйста, предоставьте образец данных для вашего вопроса.