Python — создание цикла for для создания одного CSV-файла с несколькими фреймами данных

#python-3.x #pandas #dataframe #for-loop

#python-3.x #pandas #фрейм данных #цикл for

Вопрос:

Я новичок в python и пробую разные вещи, чтобы изучить основы. Одна из вещей, на которой я сейчас застрял, — это циклы for . У меня есть следующий код, и я уверен, что его можно построить более эффективно, используя цикл, но я не уверен, как именно.

 import pandas as pd
import numpy as np
url1 = 'https://www.cbssports.com/nfl/stats/player/receiving/nfl/regular/qualifiers/?page=1'
url2 = 'https://www.cbssports.com/nfl/stats/player/receiving/nfl/regular/qualifiers/?page=2'
url3 = 'https://www.cbssports.com/nfl/stats/player/receiving/nfl/regular/qualifiers/?page=3'

df1 = pd.read_html(url1)
df1[0].to_csv ('NFL_Receiving_Page1.csv', index=False) #index false gets rid of index listing that appears as the very first column in the csv

df2 = pd.read_html(url2)
df2[0].to_csv ('NFL_Receiving_Page2.csv', index=False) #index false gets rid of index listing that appears as the very first column in the csv

df3 = pd.read_html(url3)
df3[0].to_csv ('NFL_Receiving_Page3.csv', index=False) #index false gets rid of index listing that appears as the very first column in the csv

df_receiving_agg = pd.concat([df1[0], df2[0], df3[0]])
df_receiving_agg.to_csv('NFL_Receiving_Combined.csv', index=False) #index false gets rid of index listing that appears as the very first column in the csv
  

В конечном итоге я пытаюсь объединить данные из приведенных выше URL-адресов в одну таблицу в CSV-файле.

Ответ №1:

Вы можете попробовать это:

 urls = [url1,url2,url3]
df_receiving_agg = pd.DataFrame()
for url in urls:
    df = pd.read_html(url)
    df_receiving_agg = pd.concat([df_receiving_agg, df])
df_receiving_agg.to_csv('filepath.csv',index=False)
  

Ответ №2:

Вы можете сделать это:

 base_url = 'https://www.cbssports.com/nfl/stats/player/receiving/nfl/regular/qualifiers/?page='
dfs = []
for page in range(1, 4):
    url = f'{base_url}{page}'
    df = pd.read_html(url)
    df.to_csv(f'NFL_Receiving_Page{page}.csv', index=False)
    dfs.append(df)

df_receiving_agg = pd.concat(dfs)
df_receiving_agg.to_csv('NFL_Receiving_Combined.csv', index=False)