删除csvfile中无用的列和行并使用python保存

删除csvfile中无用的列和行并使用python保存,python,csv,Python,Csv,这里是一个示例csv文件 out_gate,uless_col,in_gate,n_con p,x,x,1 p,x,y,1 p,x,z,1 a_a,u,b,1 a_a,s,b,3 a_b,e,a,2 a_b,l,c,4 a_c,e,a,5 a_c,s,b,5 a_c,s,b,3 a_c,c,a,4 a_d,o,c,2 a_d,l,c,3 a_d,m,b,2 p,y,x,1 p,y,y,1 p,y,z,3 我想删除无用的列(第二列)和无用的行(前三行和后三行),创建一个新的csv文件,然后保存这

这里是一个示例csv文件

out_gate,uless_col,in_gate,n_con
p,x,x,1
p,x,y,1
p,x,z,1
a_a,u,b,1
a_a,s,b,3
a_b,e,a,2
a_b,l,c,4
a_c,e,a,5
a_c,s,b,5
a_c,s,b,3
a_c,c,a,4
a_d,o,c,2
a_d,l,c,3
a_d,m,b,2
p,y,x,1
p,y,y,1
p,y,z,3
我想删除无用的列(第二列)和无用的行(前三行和后三行),创建一个新的csv文件,然后保存这个新文件。我如何处理csv文件,它有超过10个无用的列和无用的行

(假设无用的行仅位于顶部,或底部行不分散在中间)

(我还假设我们要使用的所有行的第一个元素名都是以“a_”开头的)


我能在不使用numpys或pandas的情况下获得解决方案吗?谢谢

下面的解决方案使用熊猫

如功能所示,您可以执行以下操作:

import pandas as pd
df = pd.read_csv("csv_name.csv")
df.drop(columns=['ulesscol'])
上面的代码正在考虑删除列,您可以按索引删除行,如下所示:

df.drop([0, 1])
或者,首先不要阅读该列:

df = pd.read_csv("csv_name.csv",
                 usecols=["out_gate", "in_gate", "n_con"])
您可以尝试以下方法:

import csv
data = list(csv.reader(open('filename.csv')))
header = [data[0][0]]+data[0][2:]
final_data = [[i[0]]+i[2:] for i in data[1:]][3:-3]
with open('filename.csv', 'w') as f:
   write = csv.writer(f)
   write.writerows([header]+final_data)
输出:

out_gate,in_gate,n_con
a,b,1
a,b,3
b,a,2
b,c,4
c,a,5
c,b,5
c,b,3
c,a,4
d,c,2
d,c,3
d,b,2

假设您有一个或多个不需要的列,并且需要的行以“a_”开头


请详细说明是否有可能提供一个包含panda和numpy的解决方案。我的意思是,如果我可以在没有panda或numpy的情况下获得一个解决方案,那么会更好。如果文件“有10多个无用行”,它们是连续的吗?如果没有,它们是如何指定的?我添加了一些补充假设
import csv
with open('filename.csv') as infile:
    reader = csv.reader(infile)
    header = next(reader)
    data = list(reader)

useless = set(['uless_col', 'n_con']) # Let's say there are 2 useless columns
mask, new_header = zip(*[(i,name) for i,name in enumerate(header) 
                          if name not in useless])
#(0,2) - column mask
#('out_gate', 'in_gate') - new column headers

new_data = [[row[i] for i in mask] for row in data] # Remove unwanted columns
new_data = [row for row in new_data if row[0].startswith("a_")] # Remove unwanted rows

with open('filename.csv', 'w') as outfile:
    writer = csv.writer(outfile)
    writer.writerow(new_header)
    writer.writerows(new_data)