从您的代码中不清楚您要做什么。
readdata 是 所有 csv 文件中的数据。您似乎想要遍历该数据(也许您想要遍历行?),所以您开始这样做,但随后您调用 readdata 上的函数,一次为您提供整行值。
让我们与熊猫互动游戏吧。我创建了一个测试 csv 文件:
"x","y"
1,3
2,6
3,9
4,10
现在,在 python 中:
Python 2.7.10 (v2.7.10:15c95b7d81dc, May 23 2015, 09:33:12)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas
>>> readdata = pandas.read_csv("/tmp/test1.csv")
你有那个。现在让我们看看readdata是什么:
>>> readdata
x y
0 1 3
1 2 6
2 3 9
3 4 10
好的,这样就可以读取数据了。但是当您尝试对其进行迭代时会发生什么?
>>> for line in readdata:
... print repr(line)
...
'x'
'y'
哦不!仅迭代 readdata 就可以得到列名。那么这显然不是你想要的。闲逛告诉我readdata 上有一个.iterrows() 方法,所以让我们试试吧:
>>> for (linenum, line) in readdata.iterrows():
... print line.irow(0)
...
1
2
3
4
那更好。那么这会如你所愿吗?
import pandas
readdata = pandas.read_csv("/home/Projects/test1.csv")
for i in range (1,4):
for (linenum, line) in readdata.iterrows():
if line.irow(0) + i == line.irow(1):
print line
现在是深入研究文档的时候了,以了解有关如何格式化 pandas 系列对象以按照您想要的方式获得输出的更多信息。作为提示,使用它(在将 import sys 放在脚本顶部之后)而不是 print line 可能是您想要的:
pandas.DataFrame([line]).to_csv(sys.stdout, index=False, header=False)
一旦您准备好使用更高级的 pandas:
import pandas
import sys
readdata = pandas.read_csv("/home/Projects/test1.csv", header=None)
for i in range (1,4):
readdata[readdata.icol(0) + i == readdata.icol(1)].to_csv(sys.stdout, index=False, header=False)
或者,如果您想要单独的文件:
import pandas
readdata = pandas.read_csv("/home/Projects/test1.csv", header=None)
for i in range (1,4):
with open("/home/Projects/test1.out.%d.csv" % i, "w") as f:
readdata[readdata.icol(0) + i == readdata.icol(1)].to_csv(f, index=False, header=False)
使用数组操作一次抓取整个大片数据。
使用 pandas 更快地制作东西的基本关键是用数组操作替换在 python 中迭代完成的循环。但是,如果您对这种用法感到惊讶,您真的需要停下来学习一个或多个 pandas 教程。