python - 从数据集中提取数据在线
问题描述
我有一个数据集,在 Bupa.data 中作为 CSV 在上面给出的链接中可用,属性数据在 Bupa.name 文件的第 7 点中给出。
https://archive.ics.uci.edu/ml/machine-learning-databases/liver-disorders/
我很困惑如何组合两个链接以从两个链接创建一个数据框,因为一个包含标题信息,另一个包含 csv 格式的数据。
我对 python 很满意,并从以下代码开始:
import pandas as pd
from bs4 import BeautifulSoup
from urllib.request import Request,urlopen
soup_link1 = BeautifulSoup(urlopen('https://archive.ics.uci.edu/ml/machine-learning-databases/liver-disorders/bupa.data'))
soup_link2 = BeautifulSoup(urlopen('https://archive.ics.uci.edu/ml/machine-learning-databases/liver-disorders/bupa.names'))
table_data = soup_link1.find('p')
table_header = soup2_link.find('p')
请进一步帮助。
解决方案
要创建对不同属性名称具有鲁棒性的代码,您可以使用正则表达式从文件中获取数据。在您的特定情况下:
import pandas as pd
import numpy as np
import re
from bs4 import BeautifulSoup
from urllib.request import Request,urlopen
soup_link1 = BeautifulSoup(urlopen('https://archive.ics.uci.edu/ml/machine-learning-databases/liver-disorders/bupa.data'))
soup_link2 = BeautifulSoup(urlopen('https://archive.ics.uci.edu/ml/machine-learning-databases/liver-disorders/bupa.names'))
table_data = soup_link1.find('p')
table_header = soup2_link.find('p')
p = re.compile(r'(?<=\d\.\s)[a-z]+')
columns = p.findall(table_header.text)
data = list(i.split(',') for i in table_data.text.split('\n'))
df = pd.DataFrame(data, columns=columns).apply(pd.to_numeric, errors='ignore')
此类数据的最大问题是所有内容都是字符串,因此我们必须在字符串和浮点数之间进行大量转换。
推荐阅读
- python - 将带有公式的 Pandas DataFrames 保存到 xlsx 文件
- r - 使用 ifelse 在 r 中创建新列
- mongodb - MongoDB 根据条件更新子文档(数组)的特定项?
- python - 使用 Tensorflow deeplab 可视化我自己的一组图像
- javascript - 如果具有 id 的元素不存在,则阻止安装组件
- scala - 在 build.sbt 中过滤类
- streaming - Gstreamer - 无法从 mpjeg 录制到 ogg
- jersey - Jersey JSON POJO 映射与 Moxy
- android - 无法使用 Mapbox API 检索用户的位置
- python - 在 python 3.7、mac high sierra 上安装 pygame 1.9.3