使用 python 将 header 添加到 .csv 文件

prepend a header to .csv file with python

我当前的代码能够从 Google 财务中获取历史数据,但缺少第一行来标记每一列。 我想要如下输出

Stock,Date,Time,Open, High,Low,Close,Volume CCK,2015-12-30,00:00:00,1.05,1.05,0.99,1.00,157800 CCK,2015-12-31,00:00:00,0.98,1.03,0.98,1.02,55300

 stocklist=['CCK','MSFT','AA','AAPL']
        stocklen=len(stocklist)

for x in range(1,stocklen,1):
    q = GoogleQuote(stocklist[x],'2015-12-21')
    header = ['Stock','Date','Time','Open','High','Low','Close']
    print header                                             
    print q                                                   
    q.write_csv(stocklist[x]+".csv")
    with open(stocklist[x]+".csv",'a') as f:
        w = csv.writer(f)
        w.writerow(['Stock','Date','Time','Open','High','Low','Close'])

然而,输出是在最后一行

CCK,2015-12-30,00:00:00,1.05,1.05,0.99,1.00,157800 CCK,2015-12-31,00:00:00,0.98,1.03,0.98,1.02,55300 Stock,Date,Time,Open, High,Low,Close,Volume

GoogleQuote从何而来?是来自 quotes.py ???

如果是这样,那么您的代码将生成带有 header 行的 CSV 文件,唯一的区别是第一列标记为 Symbol 而不是 Stock。如果您 object 该标签,您可以这样更改它:

import csv
import datetime
from itertools import repeat

header = ['Stock', 'Date', 'Time', 'Open', 'High', 'Low', 'Close', 'Volume']
stocklist=['CCK','MSFT','AA','AAPL']
start = datetime.datetime(2015, 12, 21)
#end = datetime.datetime(2015, 12, 31)
for stock in stocklist:
    q = GoogleQuote(stock, start.strftime('%F'))
    data = zip(repeat(q.symbol), q.date, q.time, q.open_, q.high, q.low, q.close, q.volume)
    with open('{}.csv'.format(stock), 'w') as f:
        w = csv.writer(f)
        w.writerow(header)
        w.writerows(data)

您可以使用 pandas:

import datetime
import pandas.io.data as web

stocklist=['CCK','MSFT','AA','AAPL']
start = datetime.datetime(2015, 12, 21)
end = datetime.datetime(2015, 12, 31)
for stock in stocklist:
    data = web.DataReader(stock, 'google', start, end)
    data.to_csv('{}.csv'.format(stock))

这将为包括日期范围在内的每只股票创建单独的 CSV 文件,header 行:

Date,Open,High,Low,Close,Volume

pandas 和您的代码之间的输出差异是:

  • 股票未作为 CSV 中的第一列显示。由于每个文件都被命名 根据库存,文件本身不需要。
  • 时间列不存在。报价是针对日期的,因此时间可能不相关。

如果您确实需要股票和时间列,可以将它们添加到数据框中。

for stock in stocklist:
    data = web.DataReader(stock, 'google', start, end)
    data.insert(0, 'Time', [ts.time() for ts in data.index])
    data.reset_index(inplace=True)    # make Date a proper column
    data.insert(0, 'Stock', stock)
    data.to_csv('{}.csv'.format(stock), index=False)

请注意,日期列是时间戳,因此可能没有必要添加时间列。相反,您可以省略添加时间列并将日期格式化为:

    data.to_csv('{}.csv'.format(stock), index=False, date_format='%F %T')