这是一个示例csv文件;
XamlSetMarkupExtensionAttribute
我想删除无用的列(第2列)和无用的行(前三行和后三行)并创建一个新的csv文件,然后保存这个新的。如何处理包含10个以上无用列和无用行的csv文件?
(假设无用的行仅位于顶部或底部线未分散在中间)
(我还假设我们想要使用的所有行的第一个元素名称以' a _'开头)
我可以在不使用numpys或pandas的情况下获得解决方案吗?谢谢!
答案 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