Cannot convert the series to <class 'int'> pandas

Viewed 453

I am working at a predicition model for sports and I encountered this problem.

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-27-90981affcf54> in <module>
     18     #print("Home",home_rank)
     19     #print("Visitor",visitor_rank)
---> 20     row["HomeTeamRanksHigher"] = int(home_rank) > int(visitor_rank)
     21     a = int(int(home_rank) < int(visitor_rank))
     22     dataset.at[index,"HomeTeamRanksHigher"] = a

~\anaconda3\lib\site-packages\pandas\core\series.py in wrapper(self)
    127         if len(self) == 1:
    128             return converter(self.iloc[0])
--> 129         raise TypeError(f"cannot convert the series to {converter}")
    130 
    131     wrapper.__name__ = f"__{converter.__name__}__"

TypeError: cannot convert the series to <class 'int'>

Here is my code.

dataset["HomeTeamRanksHigher"]= 0
for index, row in dataset.iterrows():
    home_team = row["Home"]
    visitor_team = row["Away"]
    home_rank = standings[standings["Squad"] == home_team]["Rk"]
    visitor_rank = standings[standings["Squad"] == visitor_team]["Rk"]
    #print("Home",home_rank)
    #print("Visitor",visitor_rank)
    row["HomeTeamRanksHigher"] = int(home_rank) > int(visitor_rank)
    a = int(int(home_rank) < int(visitor_rank))
    dataset.at[index,"HomeTeamRanksHigher"] = a

I checked the dtype of "HomeTeamRanksHigher" after I casted it to int and it is int64. I used pd.to_numeric and .astype(int) too.

standings["Rk"] = pd.to_numeric(standings["Rk"])
dataset["HomeTeamRanksHigher"] = pd.to_numeric(dataset["HomeTeamRanksHigher"])

Here are my columns data types

Country                        object
League                         object
Season                         object
Date                   datetime64[ns]
Time                           object
Home                           object
Away                           object
HG                              int64
AG                              int64
HomeWin                          bool
HomeLastWin                     int64
VisitorLastWin                  int64
HomeTeamRanksHigher             int64
dtype: object

In Standings most of the columns are int64. I cannot post any more code

1 Answers

Most likely these two selections are returning multiple results for certain teams:

home_rank = standings[standings["Squad"] == home_team]["Rk"]
visitor_rank = standings[standings["Squad"] == visitor_team]["Rk"]

int(home_rank) will work if home_rank is just 1 result, but if home_rank is a multi-value series, it will throw that TypeError.

You can verify by checking:

standings.groupby("Squad").Rk.value_counts().max()

If this output is not 1, then you have some duplicate Squad / Rk pairs.

Related