У меня проблема, когда я хочу создать фильтры для фрейма данных с помощью команды «for». Кто-то имеет представление о том, что не так с кодом? - PullRequest
0 голосов
/ 30 января 2020

Я сейчас изучаю 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, чтобы применить эти фильтры в соответствующем фрейме данных, но если я я не могу сделать это для фильтров. Я даже не могу применить его в фрейме данных.

У кого-то есть другой метод, который может мне помочь?

Спасибо за вашу поддержку

...