Я не могу заставить этот цикл работать, и любая помощь будет принята с благодарностью.
Я выбрал несколько точек данных на графике данных журнала для создания кадра данных coords
.coords
имеет три столбца: [x]
, [y]
и [slope]
, который содержит наклон линии, проведенной от (xi,yi)
до (xi+1,yi+1)
, с slope = 0
после моей последней точки.
Я хочу сравнить значения x
из coords
со значениями x
другого фрейма данных bg
, чтобы я мог создать значения y
для bg
.Я хочу, чтобы значения y
исходили из линии, соединяющей (xi,yi)
и (xi+1,yi+1)
для любых xj
в bg
между xi
и xi+1
.Этот код дает мне ключевую ошибку: 8, сообщая, что в coords
нет индекса 8.
Я не знаю, как остановить цикл, когда индекс достигнет len(coords)
.
for j in range(0,len(bg)):
j = 0
n = 0
for n in range(0,len(coords)):
if n < len(coords):
while bg.x[j] <= coords.x[n+1]:
bg.y[j] = coords.y[n] * np.power((bg.q[j] / coords.x[n]),coords.slope[n])
j = j+1
if n < len(coords)-1:
n=n+1
elif n == len(coords):
while bg.q[j] <= coords.x[n-1]:
bg.I_bg[j] = coords.y[n-1] * np.power((bg.q[j] / coords.x[n-1]),coords.slope[n-1])
j = j+1
вот трассировка
KeyError Traceback (most recent call last)
<ipython-input-94-70509cdf924e> in <module>()
14
15 for n in range(0,len(coords)):
---> 16 while bg.q[j] <= coords.x[n+1]:
17 bg.I_bg[j] = coords.y[n] * np.power((bg.q[j] / coords.x[n]),coords.slope[n])
18 j = j+1
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pandas/core/series.py in __getitem__(self, key)
765 key = com._apply_if_callable(key, self)
766 try:
--> 767 result = self.index.get_value(self, key)
768
769 if not is_scalar(result):
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pandas/core/indexes/base.py in get_value(self, series, key)
3116 try:
3117 return self._engine.get_value(s, k,
-> 3118 tz=getattr(series.dtype, 'tz', None))
3119 except KeyError as e1:
3120 if len(self) > 0 and self.inferred_type in ['integer', 'boolean']:
pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_value()
pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_value()
pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()
pandas/_libs/hashtable_class_helper.pxi in
pandas._libs.hashtable.Int64HashTable.get_item()
pandas/_libs/hashtable_class_helper.pxi in
pandas._libs.hashtable.Int64HashTable.get_item()
KeyError: 8
Я решил это с помощью комментариев и ответов.спасибо за то, что обратили внимание на то, как плохо написан мой код.очистка помогла.
j =0
n =0
for j in range(0,len(bg)):
for n in range(0,len(coords)):
if (n + 1) < len(coords):
while bg.q[j] <= coords.x[n+1]:
bg.I_bg[j] = coords.y[n] * np.power((bg.q[j] / coords.x[n]),coords.slope[n])
j = j+1
n=n+1
else:
bg.I_bg[j] = coords.y[n] * np.power((bg.q[j] / coords.x[n]),coords.slope[n])
plt.plot(data['q'],data['0hr'],ls='None', marker='.')
plt.plot(bg['q'],bg['I_bg'],ls='None', marker='.')
plt.plot(coords['x'],coords['y'],ls='None',marker='.')
plt.xscale('log')
plt.xlabel('q (A^-1)')
plt.yscale('log')
plt.ylabel('Intensity')
plt.legend()
вывод