【问题标题】:Python - Get CSV content from url and parse to an arrayPython - 从 url 获取 CSV 内容并解析为数组
【发布时间】:2019-07-21 10:18:42
【问题描述】:

我有问题。

我想从 url 获取 CSV 文件的内容,然后将其解析为数组。这是我现在的代码:

import requests
import pandas as pd
import io

url="https://www.test.com/csv.php"
dataset = requests.get(url, verify=False).content
df = pd.read_csv(io.StringIO(dataset.decode('utf-8')))

data = []
for row in df: # each row is a list
    data.append(row)

但是当我执行这段代码时,我只得到了 CSV 的第一行并且值在这之间 -> '

['1', '4', '0']

CSV 文件如下所示:

1,4,0
0,1,1
1,1,0
0,1,1
1,1,0
0,3,1
1,1,0
0,3,1
1,1,0

我希望得到一个这样的数组:

[[1,4,0],
 [0,1,1],
 [1,1,0],
 [0,1,1],
 [1,1,0],
 [0,3,1],
 [1,1,0],
 [0,3,1],
 [1,1,0]]

我做错了什么?

编辑:

使用 df.values 给了我这个:

[[0. 1. 1.]
 [1. 1. 0.]
 [0. 1. 1.]
 ...
 [1. 1. 0.]
 [0. 1. 1.]
 [1. 3. 0.]]

但这似乎不正确,因为第一行必须是 [1,4,0​​]。 我还需要一个 -> ,

【问题讨论】:

    标签: python arrays pandas url


    【解决方案1】:

    无需循环:.values 将返回一个矩阵

    url="https://www.test.com/csv.php"
    dataset = requests.get(url, verify=False).content
    df = pd.read_csv(io.StringIO(dataset.decode('utf-8')), header=None, sep=',')
    data=df.values
    

    【讨论】:

    • @Vreesie 可能您需要禁用标头。默认分隔符是逗号
    • 添加了您的代码和值似乎是正确的,但仍然用点而不是逗号分隔!?
    • @Vreesie 打印数据集和df,请
    【解决方案2】:

    根据 pandas 文档,您应该使用迭代行:

    df.iterrows()
    

    http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.iterrows.html#pandas.DataFrame.iterrows所示

    【讨论】:

    • 这不是我要找的
    • 我需要它是一个带有 [[]] 的数组
    【解决方案3】:

    当您从 .csv 文件读取时,默认情况下,第一行被视为标题行。您需要指定它不是。所以,在read_csv 中添加header=None。像这样:

    df = pd.read_csv(io.StringIO(dataset.decode('utf-8')), header=None)
    

    此外,以下是获得所需输出的方法之一:

    data=[]
    for r1, r2, r3 in df.values:
        data.append([r1,r2,r3])
    

    【讨论】:

    • 您能否确认上述答案是否适合您?
    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 2017-03-24
    • 2017-02-11
    • 1970-01-01
    相关资源
    最近更新 更多