我想从网络加载一个 .csv
文件并将其转换为 pandas.DataFrame
。
这是我要在其中找到 .csv
文件的目标页面:
https://vincentarelbundock.github.io/Rdatasets/datasets.html
如何从网页中加载相应项目的.csv
文件并转换为panda.DataFrame
?
此外,如果我也能从网页上获取.csv
文件的地址,那就太好了。
这将允许我创建一个函数来转换目标页面的项目名称,它将返回 .csv
文件地址,如:
def data(item):
file = 'https://vincentarelbundock.github.io/Rdatasets/csv/datasets/'+str(item)+'.csv'
但是,网页中csv文件的地址并不都是一样的。
例如,
https://vincentarelbundock.github.io/Rdatasets/csv/Stat2Data/Cuckoo.csv
https://vincentarelbundock.github.io/Rdatasets/csv/datasets/cars.csv
很多文件都在不同的目录下,所以我需要搜索'items'并获取对应的csv文件的地址。
最佳答案
Pandas 可以直接从 http 链接读取 csv
:
示例;
df = pd.read_csv(
'https://vincentarelbundock.github.io/Rdatasets/'
'csv/datasets/OrchardSprays.csv')
print(df)
结果:
Unnamed: 0 decrease rowpos colpos treatment
0 1 57 1 1 D
1 2 95 2 1 E
.. ... ... ... ... ...
62 63 3 7 8 A
63 64 19 8 8 C
[64 rows x 5 columns]
通过抓取获取链接:
要从首页获取链接本身,我们还可以使用 pandas
进行网络数据抓取。像这样的东西:
base_url = 'https://vincentarelbundock.github.io/Rdatasets/'
url = base_url + 'datasets.html'
import pandas as pd
df = pd.read_html(url, attrs={'class': 'dataframe'},
header=0, flavor='html5lib')[0]
会返回页面上表格中的数据。不幸的是,对于我们在这里的使用,这不起作用,因为 pandas
抓取页面上的文本,而不是链接。
Monkey Patching the scraper to get Links:
要获取 URL,我们可以像这样对库进行猴子修补:
def _text_getter(self, obj):
text = obj.text
if text.strip() in ('CSV', 'DOC'):
try:
text = base_url + obj.find('a')['href']
except (TypeError, KeyError):
pass
return text
from pandas.io.html import _BeautifulSoupHtml5LibFrameParser as bsp
bsp._text_getter = _text_getter
测试代码:
base_url = 'https://vincentarelbundock.github.io/Rdatasets/'
url = base_url + 'datasets.html'
import pandas as pd
df = pd.read_html(url, attrs={'class': 'dataframe'},
header=0, flavor='html5lib')[0]
for row in df.head().iterrows():
print('%-14s: %s' % (row[1].Item, row[1].csv))
结果:
AirPassengers: https://vincentarelbundock.github.io/Rdatasets/csv/datasets/AirPassengers.csv
BJsales : https://vincentarelbundock.github.io/Rdatasets/csv/datasets/BJsales.csv
BOD : https://vincentarelbundock.github.io/Rdatasets/csv/datasets/BOD.csv
CO2 : https://vincentarelbundock.github.io/Rdatasets/csv/datasets/CO2.csv
Formaldehyde : https://vincentarelbundock.github.io/Rdatasets/csv/datasets/Formaldehyde.csv
关于python - 将 web 数据文件加载到 pandas dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43422692/