将网络数据文件加载到熊猫数据框
问题描述:
我想从网络加载.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
相当多的文件都在不同的目录,所以我需要寻找“项目”,并得到相应的CSV文件的地址。
答
熊猫可以从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
抓取页面上的文字,而不是链接。
猴子修补刮刀以获得链接:
要获得的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
看来今天对我来说是糟糕的一天。如果考虑问题的规则,再次怀疑我的时间阅读我眼中的问题......问题描述了这个问题,但却错过了这个部分:你已经做了什么来解决你描述的问题? – Claudio
@Claudio,你能告诉我它在哪里指示你必须展示你所尝试过的东西吗? –
您想阅读本页所有数据集? – Hackaholic