我有一个很大的.csv
文件和50列。第一个字段是" name
"。最后两个字段都有正数和负数。我想查看最后两个字段并获取两个字段中的值均为负数的行。并创建一个新文件,其中有3个字段。第一个是名称,第二个和第三个字段有相应的值(都是负数)。这是一个输入和输出的例子。
输入:
ZNF449 -1.53 -0.45
CASKIN1 -1.58 -1.42
CAMK2B 0.31 0.23
RP11-644F5.11 -1.12 -0.94
DET1 -0.42 -0.44
NEK8 0.04 -0.4
CPM 1.26 1.16
CA11 0.16 0.08
DSE -0.06 0.12
GALM -0.03 0.04
HSPA12A 0.22 0.14
CCDC82 0.33 0.76
AC025171.1 1.24 1.27
CARD14 -0.91 -0.79
输出:
ZNF449 -1.53 -0.45
CASKIN1 -1.58 -1.42
RP11-644F5.11 -1.12 -0.94
DET1 -0.42 -0.44
CARD14 -0.91 -0.79
我怎么能在python中做到这一点?
我试过这个,但没有回复我想要的东西。
import csv
with open('data.csv', 'r') as file, f = open('out.csv', 'w')
dat = csv.reader(file, delimiter=',')
for row in dat:
if row[39] == row[40]:
new = row[0] + row[39]
f.write( new + "\n" )
答案 0 :(得分:0)
csv中只有3行。因此,只有row[0]
,row[1]
和row[2]
存在并且可以访问。
您也没有正确使用上下文管理器。您需要以逗号分隔with ... as
,如下所示。另外,对于out文件,最好使用csv writer。
此外,我还修改了一些名称,因此对于发生的事情它更具可读性。这是完整的清单:
import csv
with open('data.csv', 'r') as fin, open('out.csv', 'w') as fout:
dat_in = csv.reader(fin, delimiter=',')
dat_out = csv.writer(fout)
for row in dat_in:
i, j = map(float, row[1:]) # retrieves row[1] and row[2] and converts those column values to floats and assigns them to i and j
if i < 0 and j < 0:
dat_out.writerow([row[0], i, j])
很可能i
和j
已经浮动了,但我对你的数据不是100%肯定,所以我正在转换并然后测试,只是为了安全起见。