我正在尝试打开.csv文件并将每个列放在不同的列表中:
import csv
CSV = csv.reader(open("AAPL.csv","rb"))
column1 = CSV[0]
column2 = CSV[1]
column3 = CSV[2]
column4 = CSV[2]
column5 = CSV[4]
column6 = CSV[5]
这是我的AAPL.csv
:
Date Open High Low Close Volume Adj Close
2013-09-27 874.82 877.52 871.31 876.39 1258800 876.39
2013-09-26 878.3 882.75 875 878.17 1259900 878.17
2013-09-25 886.55 886.55 875.6 877.23 1649000 877.23
2013-09-24 886.5 890.1 881.4 886.84 1467000 886.84
2013-09-23 896.15 901.59 885.2 886.5 1777400 886.5
2013-09-20 898.39 904.13 895.62 903.11 4345300 903.11
2013-09-19 905.99 905.99 895.4 898.39 1597900 898.39
2013-09-18 886.35 903.97 883.07 903.32 1934700 903.32
2013-09-17 887.41 888.39 881 886.11 1259400 886.11
2013-09-16 896.2 897 884.87 887.76 1336500 887.76
.............................................................
end of file:
.............................................................
2012-06-29 574.96 58013 572.20 580.07 2519500 580.07
2012-06-28 565.90 566.23 557.21 564.31 1920900 564.31
2012-06-27 567.70 573.99 566.02 569.30 1692300 569.30
2012-06-26 562.76 566.60 559.48 564.68 1350200 564.68
2012-06-25 567.33 568.09 557.35 560.70 1581600 560.70
当我运行我的代码时,它会返回以下错误:
Traceback (most recent call last):
File "/home/misha/Documents/finance/prices/some_csv.py", line 3, in <module>
column1 = CSV[0]
TypeError: '_csv.reader' object has no attribute '__getitem__'
是否有任何pythonic方法可以打开.csv文件并将每个列放在不同的列表中而不使用属性getitem
?
感谢。
注意:我还需要跳过第一行。
答案 0 :(得分:3)
csv.reader
实例是CSV文件的可迭代实例。如果您希望每个列都在单独的列表中,则可以使用zip
函数:
import csv
with open("AAPL.csv", "rb") as f:
CSV = csv.reader(f)
header = next(CSV) # read the header row
column_data = zip(*CSV) # read data and arrange by columns instead of by rows
# do stuff with column_lists
请注意,这会立即读取整个文件。如果文件中包含大量数据,则可能需要重新设计算法,以便在迭代CSV
对象时一次处理一行数据,因此您无需保留这一切都在记忆中。
答案 1 :(得分:0)
这应该有效:
import csv
CSV = csv.reader(open("AAPL.csv","rb"))
for col in CSV:
column1 = col[0]
column2 = col[1]
column3 = col[3]