从 CSV 文件中删除不需要的列
Remove unwanted columns from CSV file
我有两个 CSV 文件列表,我的程序正在将它们合并到一个文件中。
第一组文件有 5 列数据,我不想包含在输出中。如何从使用 csv.reader
?
读取的数据中逐行删除或一次性删除这 5 列
这是我的函数(我想保持函数 def
和结构基本相同):
def get_data(filename,rowlen,delimit=','):
data = []
with open(filename, 'rb') as f:
raw = csv.reader(f, dialect='excel', delimiter=delimit)
if raw != None:
for row in raw:
if row[-1] == '':
row.pop()
for i in range(len(row),rowlen):
row.append('-999')
data.append(row)
return data
我试过这样做:
raw = csv.reader(f, dialect='excel', delimiter=delimit)
if raw != None:
for row in raw:
if rowlen == 13: # This is true only for csv files I want to shorten
row = row[0:8]
rowlen = 8
if row[-1] == '':
但输出文件保持不变。另外,我尝试注释掉 rowlen = 8
,但这只是用 -999
.
填充了我不想要的列
您需要替换 raw 中的行或创建一个包含切片行的新列表,此处使用枚举更正部分代码以跟踪 raw 中要替换的行的索引.
for i, row in enumerate(raw):
if rowlen == 13: # This is true only for csv files I want to shorten
raw[i] = row[0:8]
rowlen = 8
另一个不改变 raw 的例子:
new_container = []
for row in raw:
if rowlen == 13: # This is true only for csv files I want to shorten
new_container.append(row[0:8]) # we just append your slice to the new_container each iteration
rowlen = 8
你应该看看 pandas。它使 csv 的工作变得更好..
from pandas import read_csv
def get_data(filename, rowlen, delimit=','):
df = read_csv(filename, header=None, sep=delimit, usecols=range(rowlen))
df.to_csv('output.csv', index=False)
get_data('input.csv',4)
我有两个 CSV 文件列表,我的程序正在将它们合并到一个文件中。
第一组文件有 5 列数据,我不想包含在输出中。如何从使用 csv.reader
?
这是我的函数(我想保持函数 def
和结构基本相同):
def get_data(filename,rowlen,delimit=','):
data = []
with open(filename, 'rb') as f:
raw = csv.reader(f, dialect='excel', delimiter=delimit)
if raw != None:
for row in raw:
if row[-1] == '':
row.pop()
for i in range(len(row),rowlen):
row.append('-999')
data.append(row)
return data
我试过这样做:
raw = csv.reader(f, dialect='excel', delimiter=delimit)
if raw != None:
for row in raw:
if rowlen == 13: # This is true only for csv files I want to shorten
row = row[0:8]
rowlen = 8
if row[-1] == '':
但输出文件保持不变。另外,我尝试注释掉 rowlen = 8
,但这只是用 -999
.
您需要替换 raw 中的行或创建一个包含切片行的新列表,此处使用枚举更正部分代码以跟踪 raw 中要替换的行的索引.
for i, row in enumerate(raw):
if rowlen == 13: # This is true only for csv files I want to shorten
raw[i] = row[0:8]
rowlen = 8
另一个不改变 raw 的例子:
new_container = []
for row in raw:
if rowlen == 13: # This is true only for csv files I want to shorten
new_container.append(row[0:8]) # we just append your slice to the new_container each iteration
rowlen = 8
你应该看看 pandas。它使 csv 的工作变得更好..
from pandas import read_csv
def get_data(filename, rowlen, delimit=','):
df = read_csv(filename, header=None, sep=delimit, usecols=range(rowlen))
df.to_csv('output.csv', index=False)
get_data('input.csv',4)