如何从 pandas 数据框中的网页读取所有 csv 文件?
How to read all csv files from web page in a pandas data frame?
我正在尝试将所有 .csv 文件从 https://github.com/CSSEGISandData/COVID-19/tree/master/csse_covid_19_data/csse_covid_19_daily_reports 读取到数据框。
到目前为止我的代码:
url = 'https://github.com/CSSEGISandData/COVID-19/tree/master/csse_covid_19_data/csse_covid_19_daily_reports'
x = requests.get(url).text
filenames = re.findall('[\d]{1,2}-[\d]{1,2}-[\d]{4}.csv', x)
frame = pd.concat(pd.read_csv(url + y) for y in filenames)
也许有人可以提供帮助:D
将URL更改为
url = 'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/'
它应该可以工作。这使您可以访问原始 csv 文件,而不是 csv 所在的页面。
编辑:
刚刚注意到您需要旧的 url 来获取文件名:
url_raw = 'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/'
url = 'https://github.com/CSSEGISandData/COVID-19/tree/master/csse_covid_19_data/csse_covid_19_daily_reports'
x = requests.get(url).text
filenames = re.findall('[\d]{1,2}-[\d]{1,2}-[\d]{4}.csv', x)
frame = pd.concat(pd.read_csv(url_raw + y) for y in filenames)
另一种选择是运行用下面的代码
frame = pd.concat(pd.read_csv(f'{url}/{y}') for y in filenames)
作为附加说明,您可能无法从 pd.concat 获得预期的行为,因为给定的 url 中的 csv 文件在列方面不一致(请参见下面的示例)。您可能希望在连接之前重命名或去除某些列。
01-27-2020.csv
Province/State,Country/Region,Last Update,Confirmed,Deaths,Recovered
03-01-2020.csv
Province/State,Country/Region,Last Update,Confirmed,Deaths,Recovered,Latitude,Longitude
04-26-2020.csv
FIPS,Admin2,Province_State,Country_Region,Last_Update,Lat,Long_,Confirmed,Deaths,Recovered,Active,Combined_Key
06-28-2020.csv
FIPS,Admin2,Province_State,Country_Region,Last_Update,Lat,Long_,Confirmed,Deaths,Recovered,Active,Combined_Key,Incidence_Rate,Case-Fatality_Ratio
我正在尝试将所有 .csv 文件从 https://github.com/CSSEGISandData/COVID-19/tree/master/csse_covid_19_data/csse_covid_19_daily_reports 读取到数据框。
到目前为止我的代码:
url = 'https://github.com/CSSEGISandData/COVID-19/tree/master/csse_covid_19_data/csse_covid_19_daily_reports'
x = requests.get(url).text
filenames = re.findall('[\d]{1,2}-[\d]{1,2}-[\d]{4}.csv', x)
frame = pd.concat(pd.read_csv(url + y) for y in filenames)
也许有人可以提供帮助:D
将URL更改为
url = 'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/'
它应该可以工作。这使您可以访问原始 csv 文件,而不是 csv 所在的页面。
编辑: 刚刚注意到您需要旧的 url 来获取文件名:
url_raw = 'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/'
url = 'https://github.com/CSSEGISandData/COVID-19/tree/master/csse_covid_19_data/csse_covid_19_daily_reports'
x = requests.get(url).text
filenames = re.findall('[\d]{1,2}-[\d]{1,2}-[\d]{4}.csv', x)
frame = pd.concat(pd.read_csv(url_raw + y) for y in filenames)
另一种选择是运行用下面的代码
frame = pd.concat(pd.read_csv(f'{url}/{y}') for y in filenames)
作为附加说明,您可能无法从 pd.concat 获得预期的行为,因为给定的 url 中的 csv 文件在列方面不一致(请参见下面的示例)。您可能希望在连接之前重命名或去除某些列。
01-27-2020.csv
Province/State,Country/Region,Last Update,Confirmed,Deaths,Recovered
03-01-2020.csv
Province/State,Country/Region,Last Update,Confirmed,Deaths,Recovered,Latitude,Longitude
04-26-2020.csv
FIPS,Admin2,Province_State,Country_Region,Last_Update,Lat,Long_,Confirmed,Deaths,Recovered,Active,Combined_Key
06-28-2020.csv
FIPS,Admin2,Province_State,Country_Region,Last_Update,Lat,Long_,Confirmed,Deaths,Recovered,Active,Combined_Key,Incidence_Rate,Case-Fatality_Ratio