Fehlermeldung bei Verwenden von widgets.IntSlider
Verfasst: Montag 29. August 2022, 22:22
Hallo Zusammen, ich lerne seit kurzer Zeit Programmieren und komme an einem Punkt nicht weiter. Mein Ziel ist es, ein Dataframe auszugeben was die meist bewerteten Filme anzeigt. Die Columns des DF sind: movieID, Titel des Films, und Anzahl der erhaltenen Bewertungen. Die Ausgabe des Dataframes wie ich es haben will klappt alles, jetzt würde ich gern ein Slider einfügen, bei dem der Nutzer durch verschieben des Reglers (z.B. von 3 auf 5), sich die Menge der ausgegebenen (meist bewerteten) Filme ändert (sprich: nicht mehr die top 3 Filme sondern jetzt top 5 Filme).
Wenn ich hierbei die Funktion wie folgt aufrufe:
-> funktioniert alles und mir werden die 10 Filme mit den meisten Bewertungen angezeigt.
Jetzt mit dem Slider Funktioniert das leider nicht:
Dann erhalte ich diese Fehlermeldung, wäre sehr korrekt wenn mir jemand helfen kann ?
ps. dass der Code nicht sehr anschaulich ist, ist mir bewusst
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/var/folders/r1/txm07tps00s295995cqyrs2w0000gn/T/ipykernel_8101/1253293865.py in <module>
2
3 set_anzahl = widgets.IntSlider(min=1, max=20, step=1, value=1, description="Anzahl:")
----> 4 most_rated_film(movies, ratings, set_anzahl)
/var/folders/r1/txm07tps00s295995cqyrs2w0000gn/T/ipykernel_8101/3440946735.py in most_rated_film(df1, df2, anzahl)
15 countpermovie.rename(columns={'title':'Titel des Films',
16 'Menge der Bewertungen':'Anzahl der erhaltenen Bewertungen'},inplace=True)
---> 17 return countpermovie.head(anzahl)
~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/generic.py in head(self, n)
5071 5 parrot
5072 """
-> 5073 return self.iloc[:n]
5074
5075 @final
~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/indexing.py in __getitem__(self, key)
929
930 maybe_callable = com.apply_if_callable(key, self.obj)
--> 931 return self._getitem_axis(maybe_callable, axis=axis)
932
933 def _is_scalar_access(self, key: tuple):
~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/indexing.py in _getitem_axis(self, key, axis)
1541
1542 if isinstance(key, slice):
-> 1543 return self._get_slice_axis(key, axis=axis)
1544
1545 if is_iterator(key):
~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/indexing.py in _get_slice_axis(self, slice_obj, axis)
1576
1577 labels = obj._get_axis(axis)
-> 1578 labels._validate_positional_slice(slice_obj)
1579 return self.obj._slice(slice_obj, axis=axis)
1580
~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/indexes/base.py in _validate_positional_slice(self, key)
3682 """
3683 self._validate_indexer("positional", key.start, "iloc")
-> 3684 self._validate_indexer("positional", key.stop, "iloc")
3685 self._validate_indexer("positional", key.step, "iloc")
3686
~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/indexes/base.py in _validate_indexer(self, form, key, kind)
5717
5718 if key is not None and not is_integer(key):
-> 5719 raise self._invalid_indexer(form, key)
5720
5721 def _maybe_cast_slice_bound(self, label, side: str_t, kind=no_default):
TypeError: cannot do positional indexing on RangeIndex with these indexers [IntSlider(value=1, description='Anzahl:', max=20, min=1)] of type IntSlider
Code: Alles auswählen
def most_rated_film(df1,df2,anzahl):
dfmovies = df1
dfratings = df2
dfmerge = pd.merge(dfmovies,dfratings,on = "movieId")
dfmerge["Menge der Bewertungen"] = 1
dfmenge = dfmerge.groupby("movieId")["Menge der Bewertungen"].sum()
dfmenge = dfmenge.to_frame()
dfmenge = dfmenge.reset_index()
dfzusammen = pd.merge(movies,dfmenge,on = "movieId")
countpermovie = dfzusammen.sort_values("Menge der Bewertungen", axis = 0,ascending = False)
countpermovie = countpermovie.reset_index()
countpermovie = countpermovie[["movieId","title","Menge der Bewertungen"]]
countpermovie.rename(columns={'title':'Titel des Films',
'Menge der Bewertungen':'Anzahl der erhaltenen Bewertungen'},inplace=True)
return countpermovie.head(anzahl)
Code: Alles auswählen
most_rated_film(movies,ratings,10)
Jetzt mit dem Slider Funktioniert das leider nicht:
Code: Alles auswählen
set_anzahl = widgets.IntSlider(min=1, max=20, step=1, value=1, description="Anzahl:")
most_rated_film(movies, ratings, set_anzahl)
ps. dass der Code nicht sehr anschaulich ist, ist mir bewusst

---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/var/folders/r1/txm07tps00s295995cqyrs2w0000gn/T/ipykernel_8101/1253293865.py in <module>
2
3 set_anzahl = widgets.IntSlider(min=1, max=20, step=1, value=1, description="Anzahl:")
----> 4 most_rated_film(movies, ratings, set_anzahl)
/var/folders/r1/txm07tps00s295995cqyrs2w0000gn/T/ipykernel_8101/3440946735.py in most_rated_film(df1, df2, anzahl)
15 countpermovie.rename(columns={'title':'Titel des Films',
16 'Menge der Bewertungen':'Anzahl der erhaltenen Bewertungen'},inplace=True)
---> 17 return countpermovie.head(anzahl)
~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/generic.py in head(self, n)
5071 5 parrot
5072 """
-> 5073 return self.iloc[:n]
5074
5075 @final
~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/indexing.py in __getitem__(self, key)
929
930 maybe_callable = com.apply_if_callable(key, self.obj)
--> 931 return self._getitem_axis(maybe_callable, axis=axis)
932
933 def _is_scalar_access(self, key: tuple):
~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/indexing.py in _getitem_axis(self, key, axis)
1541
1542 if isinstance(key, slice):
-> 1543 return self._get_slice_axis(key, axis=axis)
1544
1545 if is_iterator(key):
~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/indexing.py in _get_slice_axis(self, slice_obj, axis)
1576
1577 labels = obj._get_axis(axis)
-> 1578 labels._validate_positional_slice(slice_obj)
1579 return self.obj._slice(slice_obj, axis=axis)
1580
~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/indexes/base.py in _validate_positional_slice(self, key)
3682 """
3683 self._validate_indexer("positional", key.start, "iloc")
-> 3684 self._validate_indexer("positional", key.stop, "iloc")
3685 self._validate_indexer("positional", key.step, "iloc")
3686
~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/indexes/base.py in _validate_indexer(self, form, key, kind)
5717
5718 if key is not None and not is_integer(key):
-> 5719 raise self._invalid_indexer(form, key)
5720
5721 def _maybe_cast_slice_bound(self, label, side: str_t, kind=no_default):
TypeError: cannot do positional indexing on RangeIndex with these indexers [IntSlider(value=1, description='Anzahl:', max=20, min=1)] of type IntSlider