nflverse / nfl_data_py

Python code for working with NFL play by play data.
MIT License
289 stars 54 forks source link

Team Abbreviations don't match between imports #87

Open darkhark opened 5 months ago

darkhark commented 5 months ago

Is there an existing issue for this?

Have you installed the latest development version of the package(s) in question?

If this is a data issue, have you tried clearing your nflverse cache?

I have cleared my nflverse cache and the issue persists.

What version of the package do you have?

0.3.1

Describe the bug

The weekly stats and schedule stats use different team abbreviations for teams that moved. For example, in 1999, the chargers are SD in the schedule data, but are LAC in the weekly stats data. There may be more (like STL and LA) but I found this while attempting to merge the two datasets and noticed the chargers data was missing in 1999 - 2016.

Reprex

import nfl_data_py as nfl

weekly_df = nfl.import_weekly_data([1999, 2017])
schedule_df = nfl.import_schedules([1999, 2017])

print('Weekly Data')
print(weekly_df[weekly_df['opponent_team'] == 'LAC'][['season', 'opponent_team']])
print('-------------------')
print('Schedule Data')
print(schedule_df[schedule_df['away_team'] == 'LAC'][['season', 'away_team']])

Expected Behavior

I would expect all team abbreviations to be consistent between imports. Ideally, they would all use the team name at the time.

nflverse_sitrep

NA

Screenshots

No response

Additional context

This may be the desired outcome when this was written, but even if it is, it would be useful to have a parameter or something that can convert the team names to either what they were at the time or to the most recent names

alecglen commented 2 months ago

This is the case for SD -> LAC, STL -> LA, and OAK -> LV. It's not really a bug, it's just how the data is presented in the nflverse sources.

I've also gotten caught up on this before though, and I like the idea of a parameter to toggle the updates. I'll plan on adding that at some point.

Here's a quick conversion for anyone needing it in the meantime:

for col in ("recent_team", "opponent_team"):
    weekly_df.loc[(weekly_df[col] == "LA") & (weekly_df["season"] <= 2015), col] = "STL"
    weekly_df.loc[(weekly_df[col] == "LAC") & (weekly_df["season"] <= 2016), col] = "SD"
    weekly_df.loc[(weekly_df[col] == "LV") & (weekly_df["season"] <= 2019), col] = "OAK"