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

时间:2018-01-26 23:12:40

标签: python csv

这是一个示例csv文件;

XamlSetMarkupExtensionAttribute

我想删除无用的列(第2列)和无用的行(前三行和后三行)并创建一个新的csv文件,然后保存这个新的。如何处理包含10个以上无用列和无用行的csv文件?

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

(我还假设我们想要使用的所有行的第一个元素名称以' a _'开头)

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

3 个答案:

答案 0 :(得分:1)

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

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)

答案 1 :(得分:0)

以下解决方案使用Pandas。

正如pandas dataframe drop函数所示,您可以执行以下操作:

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"])

答案 2 :(得分:0)

你可以试试这个:

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