【问题标题】:Read url as pandas dataframe with column names (python3)将 url 读取为带有列名的 pandas 数据框(python3)
【发布时间】:2017-07-30 07:44:42
【问题描述】:

我已阅读有关此主题的几个问题,但似乎没有什么对我有用。

我想从该页面“http://archive.ics.uci.edu/ml/machine-learning-databases/statlog/heart/heart.dat”检索具有特定列名称的数据。

我的代码如下,它不允许我为数据的列分配名称,因为所有内容都在一个列中:

import pandas as pd
import io
import requests
url="http://archive.ics.uci.edu/ml/machine-learningdatabases/statlog/heart/heart.dat"
s=requests.get(url).content
header_row = ['age','sex','chestpain','restBP','chol','sugar','ecg','maxhr','angina','dep','exercise','fluor','thal','diagnosis']
c=pd.read_csv(io.StringIO(s.decode('utf-8')), names=header_row)
print(c)

输出是:

     age  sex  chestpain  \
0    70.0 1.0 4.0 130.0 322.0 0.0 2.0 109.0 0.0 2.4...  NaN        NaN   
1    67.0 0.0 3.0 115.0 564.0 0.0 2.0 160.0 0.0 1.6...  NaN        NaN   
2    57.0 1.0 2.0 124.0 261.0 0.0 0.0 141.0 0.0 0.3...  NaN        NaN   
3    64.0 1.0 4.0 128.0 263.0 0.0 0.0 105.0 1.0 0.2...  NaN        NaN

我必须做什么才能实现我的目标?

非常感谢!!!

【问题讨论】:

标签: python pandas url


【解决方案1】:

您提供的链接缺少连字符。我已经在我的回答中纠正了这一点。基本上,您需要将s 字符串解码为utf-8,然后将其拆分为\n 以获取每一行,然后将每一行拆分为空白以分别获取每个值。这将为您提供数据集的嵌套列表表示形式,您可以将其转换为 pandas 数据框,然后您可以分配列名。

import pandas as pd
import io
import requests
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/statlog/heart/heart.dat"
s = requests.get(url).content
s = s.decode('utf-8')
s_rows = s.split('\n')
s_rows_cols = [each.split() for each in s_rows]
header_row = ['age','sex','chestpain','restBP','chol','sugar','ecg','maxhr','angina','dep','exercise','fluor','thal','diagnosis']
c = pd.DataFrame(s_rows_cols, columns = header_row)
c.head()

【讨论】:

    猜你喜欢
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    • 2017-07-24
    • 2016-03-31
    • 2018-12-14
    • 2021-11-22
    • 2020-09-08
    相关资源
    最近更新 更多