我有一个csv文件,300行:
ID,HEIGHT,MEAN WEIGHT,20-Nov-2002,05-Mar-2003,09-Apr-2003,23-Jul-2003
1,1.80,80,78,78,82,82
2,1.60,58,56,60,60,56
3,1.90,100,98,102,98,102
我想要一个文件删除列MEAN WEIGHT>的所有行。 75并获得另一个新文件
ID,HEIGHT,MEAN WEIGHT,20-Nov-2002,05-Mar-2003,09-Apr-2003,23-Jul-2003
1,1.80,80,78,78,82,82
3,1.90,100,98,102,98,102
答案 0 :(得分:2)
如果您对非Python解决方案开放并访问bash shell或awk
$ awk -F, '$3>75' filename
ID,HEIGHT,MEAN WEIGHT,20-Nov-2002,05-Mar-2003,09-Apr-2003,23-Jul-2003
1,1.80,80,78,78,82,82
3,1.90,100,98,102,98,102
答案 1 :(得分:1)
使用plain python:
orig = open('original.csv', 'r')
modi = open('modified.csv', 'w')
#header
modi.write(orig.readline())
# data lines
for line in old:
if float(line.split(',')[2]) <= 75:
modi.write(line)
orig.close()
modi.close()
答案 2 :(得分:1)
正如@Vignesh Kalai建议的那样,使用pandas
import pandas as pd
df = pd.read_csv("yourfile.csv", sep=",")
df[ df["MEAN WEIGHT"] > 75 ].to_csv("yournewfile.csv", index=False)
已经完成了。
P.S。您要求的值低于75但是您正在显示对立面。如果是第一种情况则替换&#34; > 75
&#34;通过&#34; <= 75
&#34;。
答案 3 :(得分:0)
您可以使用Python csv
库,如下所示:
import csv
with open('input.csv', 'r') as f_input, open('output.csv', 'wb') as f_output:
csv_input = csv.reader(f_input)
csv_output = csv.writer(f_output)
# Write the header
csv_output.writerow(next(csv_input))
for cols in csv_input:
if int(cols[2]) <= 75: # Keep weights <= 75
csv_output.writerow(cols)
因此,根据您提供的数据,您将获得以下output.csv
文件:
ID,HEIGHT,MEAN WEIGHT,20-Nov-2002,05-Mar-2003,09-Apr-2003,23-Jul-2003
2,1.60,58,56,60,60,56
答案 4 :(得分:0)
打印到屏幕的Perl解决方案,类似于karakfa的Awk解决方案:
perl -F, -ane 'print if $. == 1 or $F[4] > 75' filename
@F
autosplit数组从索引$F[0]
开始,而awk字段以$1
开头
此变体就地编辑文件:
perl -i -F, -ane 'print if $. == 1 or $F[4] > 75' filename
此变体会就地编辑文件,并进行备份filename.bak
perl -i.bak -F, -ane 'print if $. == 1 or $F[4] > 75' filename