我正在使用requests.get
下载csv文件。我只需要这个csv文件中的两列,而列的其余部分对我来说都是无用的。目前我正在使用
r = requests.get(finalurl, verify=False,stream=True)
shutil.copyfileobj(r.raw, csvfile)
获取完整的csv文件。
但是,我只想从csv文件中下载两列。我总是可以下载整个内容,然后采取必要的措施。
只需检查是否有办法使用requests.get
获取特定列
例如:http://chart.finance.yahoo.com/table.csv?s=AAPL&a=7&b=20&c=2016&d=8&e=20&f=2016&g=d&ignore=.csv
我只需要来自此csv文件的date
和Adj.close
。
无法找到类似的问题,如果之前提出类似的问题,请指导我。
由于
答案 0 :(得分:2)
尝试pandas,在您的情况下,大熊猫更方便。
In [2]: import pandas.io.data as web
...: aapl = web.DataReader("AAPL", 'yahoo','2016-7-20','2016-8-20')
...: aapl['Adj Close']
...:
...:
Out[2]:
Date
2016-07-20 99.421412
2016-07-21 98.894269
2016-07-22 98.128421
2016-07-25 96.815526
2016-07-26 96.149138
2016-07-27 102.395300
2016-07-28 103.777810
2016-07-29 103.648513
2016-08-01 105.478603
2016-08-02 103.917063
2016-08-03 105.220002
2016-08-04 105.870003
2016-08-05 107.480003
2016-08-08 108.370003
2016-08-09 108.809998
2016-08-10 108.000000
2016-08-11 107.930000
2016-08-12 108.180000
2016-08-15 109.480003
2016-08-16 109.379997
2016-08-17 109.220001
2016-08-18 109.080002
2016-08-19 109.360001
Name: Adj Close, dtype: float64
答案 1 :(得分:1)
您可以使用Numpy和Loadtext:
import numpy as np
b=np.loadtxt(r'name.csv',dtype=str,delimiter=',',skiprows=1,usecols=(0,1,2))
这将创建一个数组,其中只包含您选择的列的数据。
答案 2 :(得分:0)
您不能只下载某些列,您可以使用常规财务API。您不必一次性下载所有数据,然后替换之后,您可以随时解析:
import csv
final_url = "http://chart.finance.yahoo.com/table.csv?s=AAPL&a=7&b=20&c=2016&d=8&e=20&f=2016&g=d&ignore=.csv"
with open("out.csv", "w") as out:
writer = csv.writer(out)
data = requests.get(final_url, verify=False, stream=True).iter_lines()
headers = fieldnames = next(data).split(",")
reader = csv.DictReader(data, fieldnames=headers)
writer.writerow(["Date", "Adj Close"])
for row in reader:
writer.writerow([row["Date"], row["Adj Close"]])
您可以直接索引列顺序是否保证永不更改,但使用 DictReader 可让您按键访问,因此顺序无关紧要。我认为假设数据中没有任何换行符也是安全的。