2017-04-15 103 views
2

我想从网络加载.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文件的地址。

+0

看来今天对我来说是糟糕的一天。如果考虑问题的规则,再次怀疑我的时间阅读我眼中的问题......问题描述了这个问题,但却错过了这个部分:你已经做了什么来解决你描述的问题? – Claudio

+1

@Claudio,你能告诉我它在哪里指示你必须展示你所尝试过的东西吗? –

+0

您想阅读本页所有数据集? – Hackaholic

回答

4

熊猫可以从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 
+0

你摇滚! :-)(填充) – piRSquared

+0

是的,你只是让我轻松,所以我可以建立一些自信。 –

+0

我需要你对自己感觉良好! – piRSquared