我想从网络加载.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 :(得分:6)
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
抓取页面上的文本,而不是链接。
猴子修补刮刀以获取链接:
要获取网址,我们可以像以下一样修补图书馆:
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