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

2024-09-28 05:20:00 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个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_u”开头)

我能在不使用Numpy或熊猫的情况下得到解决方案吗?谢谢!在


Tags: 文件csvinnumpy元素示例情况col
3条回答

下面的解决方案使用熊猫。在

正如pandas dataframe drop函数建议的那样,您可以执行以下操作:

import pandas as pd
df = pd.read_csv("csv_name.csv")
df.drop(columns=['ulesscol'])

上面的代码正在考虑删除列,可以按索引删除行,如下所示:

^{pr2}$

或者,首先不要在列中阅读:

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)

输出:

^{pr2}$

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

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)

相关问题 更多 >

    热门问题