import pandas
readdata = pandas.read_csv("/home/Projects/test1.csv")
for i in range (1,4):
for line in readdata:
if readdata.irow(0) + i == readdata.irow(1):
print readdata
我正在使用python 2.7
Traceback (most recent call last):
File "/home/PycharmProjects/filters.py", line 8, in <module>
if readdata.irow(0) + i == readdata.irow(1):
File "/home/.virtualenvs/env/lib/python2.7/site-packages/pandas/core/generic.py", line 714, in __nonzero__
.format(self.__class__.__name__))
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我坚持使用pandas,因为它提供了许多我想要使用的东西。如果不可能,那么我知道如何在csv模块中做到这一点,我改变了代码以便使用pandas,但这是第一次,所以它很棘手。
答案 0 :(得分:4)
从您的代码中不清楚您正在尝试做什么。
readdata
所有 csv文件中的数据。你似乎想迭代那些数据(也许你想迭代这些行?),所以你开始这样做,但是你调用readdata
上的函数,它们一次给你整行的值。< / p>
让我们与熊猫互动。我创建了一个测试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
进行迭代可以得到列名。嗯,这显然不是你想要的。四处寻找告诉我.iterrows()
上有一个readdata
方法,所以让我们尝试一下:
>>> 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)
一旦你准备好使用更高级的熊猫:
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教程。