Я сейчас изучаю Data Science и это мой первый проект, но я застрял в циклах; над фильтрами и применением фильтров к фрейму данных
У меня следующая ошибка: ValueError: No axis named 1 for object type <class 'pandas.core.series.Series'>
Это описание того, что я делал.
I иметь этот код для простого фильтра;
#for i in range(0, 25):
GDP = df_data['IndicatorName'].str.contains(df_GDP['IndicatorName'].iloc[1], regex=False)
print(df_data[GDP]['IndicatorName'].unique().tolist())
И вернуть это
['GDP per capita (current US$)']
Это работает правильно.
Но когда я сделаю это для многих строк [с .lo c () /. ilo c ()] Я не хочу, чтобы это делалось один за другим. Вместо этого я хочу 'для' l oop, как это;
for i in range(0, len(df_GDP['IndicatorName'])):
GDP[i] = df_data['IndicatorName'].str.contains(df_GDP['IndicatorName'].iloc[i], regex=False)
print(df_data[GDP[i]]['IndicatorName'].unique().tolist())
При первом запуске l oop работает хорошо, затем я не знаю, что происходит, но я снова запускаю тот же код и это время не работает вообще и возвращает мне следующую трассировку:
ValueError Traceback (most recent call last)
~\Anaconda3\lib\site-packages\pandas\core\series.py in setitem(key, value)
1189 try:
-> 1190 self._set_with_engine(key, value)
1191 return
~\Anaconda3\lib\site-packages\pandas\core\series.py in _set_with_engine(self, key, value)
1251 try:
-> 1252 self.index._engine.set_value(values, key, value)
1253 return
pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.set_value()
pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.set_value()
ValueError: setting an array element with a sequence.
During handling of the above exception, another exception occurred:
ValueError Traceback (most recent call last)
<ipython-input-164-56b73a3efce9> in <module>
2 #print(i)
3 for i in range(0, 25):
----> 4 GDP[i] = df_data['IndicatorName'].str.contains(df_GDP['IndicatorName'].iloc[i], regex=False)
5 print(df_data[GDP[i]]['IndicatorName'].unique().tolist())
~\Anaconda3\lib\site-packages\pandas\core\series.py in __setitem__(self, key, value)
1239 # do the setitem
1240 cacher_needs_updating = self._check_is_chained_assignment_possible()
-> 1241 setitem(key, value)
1242 if cacher_needs_updating:
1243 self._maybe_update_cacher()
~\Anaconda3\lib\site-packages\pandas\core\series.py in setitem(key, value)
1216 pass
1217
-> 1218 self.loc[key] = value
1219 return
1220
~\Anaconda3\lib\site-packages\pandas\core\indexing.py in __setitem__(self, key, value)
203 key = com.apply_if_callable(key, self.obj)
204 indexer = self._get_setitem_indexer(key)
--> 205 self._setitem_with_indexer(indexer, value)
206
207 def _validate_key(self, key, axis: int):
~\Anaconda3\lib\site-packages\pandas\core\indexing.py in _setitem_with_indexer(self, indexer, value)
581 # setting for extensionarrays that store dicts. Need to decide
582 # if it's worth supporting that.
--> 583 value = self._align_series(indexer, Series(value))
584
585 elif isinstance(value, ABCDataFrame):
~\Anaconda3\lib\site-packages\pandas\core\indexing.py in _align_series(self, indexer, ser, multiindex_indexer)
740
741 elif is_scalar(indexer):
--> 742 ax = self.obj._get_axis(1)
743
744 if ser.index.equals(ax):
~\Anaconda3\lib\site-packages\pandas\core\generic.py in _get_axis(self, axis)
425
426 def _get_axis(self, axis):
--> 427 name = self._get_axis_name(axis)
428 return getattr(self, name)
429
~\Anaconda3\lib\site-packages\pandas\core\generic.py in _get_axis_name(cls, axis)
422 except KeyError:
423 pass
--> 424 raise ValueError("No axis named {0} for object type {1}".format(axis, cls))
425
426 def _get_axis(self, axis):
ValueError: No axis named 1 for object type <class 'pandas.core.series.Series'>
Затем я хочу использовать другие l oop, чтобы применить эти фильтры в соответствующем фрейме данных, но если я я не могу сделать это для фильтров. Я даже не могу применить его в фрейме данных.
У кого-то есть другой метод, который может мне помочь?
Спасибо за вашу поддержку