Aggiungi righe al frame di dati panda alla fine di un ciclo
Sto cercando di aggiungere righe nel frame di dati come parte di un ciclo.
Il programma scorre gli URL ed estrae i dati in un formato frame di dati
for id in game_ids:
df_team_final = []
df_player_final = []
url = 'https://www.fibalivestats.com/data/' + id + '/data.json'
content = requests.get(url)
data = json.loads(content.content)
Alla fine del loop ho usato concat per unire i due df delle squadre in trasferta (e dei giocatori)
team_full = pd.concat([df_home_team, df_away_team])
player_full = pd.concat([df_home_player_merge, df_away_player_merge])
Fuori dal ciclo ho quindi programmato di salvare come Excel
# #if cant find it, create new spread sheet
writer = pd.ExcelWriter('Box Data.xlsx', engine='openpyxl')
team_full.to_excel(writer, sheet_name='Team Stats', index=False)
player_full.to_excel(writer, sheet_name='Player Stats', index=False)
writer.save()
writer.close()
Dato che sto scorrendo un certo numero di pagine web ho bisogno di aggiornare il df mentre vado, ovviamente nel formato corrente sto solo sovrascrivendo il primo URL con il secondo ciclo
Qual è il modo migliore per aggiungere o aggiungere al dataframe alla fine del ciclo?
Grazie
Risposte
Posso fornire qui solo uno schema semplice poiché non vediamo il codice completo.
Presumo che tu non aggiunga dati raschiati a una sorta di contenitore, quindi si perde dopo l'iterazione successiva.
# empty lists outside of loop to store data
df_team_final = []
df_player_final = []
for id in game_ids:
url = 'https://www.fibalivestats.com/data/' + id + '/data.json'
content = requests.get(url)
data = json.loads(content.content)
# create dataframes that you need
# df_home_team, df_away_team etc
# and append data to containers
team_full = pd.concat([df_home_team, df_away_team])
player_full = pd.concat([df_home_player_merge, df_away_player_merge])
df_team_final.append(team_full)
df_player_final.append(player_full )
Ora che hai memorizzato i dataframe come elenchi, puoi unirli con pandas.concat
# outside of the loop
team_full = pd.concat(df_team_final)
player_full = pd.concat(df_player_final)
e salva subito:
writer = pd.ExcelWriter('Box Data.xlsx', engine='openpyxl')
team_full.to_excel(writer, sheet_name='Team Stats', index=False)
player_full.to_excel(writer, sheet_name='Player Stats', index=False)
writer.save()
writer.close()
modificare
Dal file che hai condiviso vedo che hai aggiunto dei contenitori all'interno di un loop:

Ma dovresti metterli prima che inizi il ciclo:
# initialize them here
df_team_final = []
df_player_final = []
for id in game_ids: