[英]How to delete a row in a CSV file if a cell is empty using Python
我想 go 通过大 CSV 文件,如果缺少数据,我想完全删除该行,这只是特定于行的,所以如果有一个单元格 = 0 或没有值,那么我想删除整行。 我希望所有列都发生这种情况,所以如果任何列有一个黑色单元格,它应该删除该行,并在更正后的 csv 中返回更正后的数据。
import csv
with open('data.csv', 'r') as csvfile:
csvreader = csv.reader(csvfile)
for row in csvreader:
print(row)
if not row[0]:
print("12")
这是我发现并尝试过的,但它似乎没有用,我对如何解决这个问题没有任何想法,请帮忙?
谢谢!
也许像这样
import csv
with open('data.csv', 'r') as csvfile:
csvreader = csv.reader(csvfile)
data=list(csvreader)
data=[x for x in data if '' not in x and '0' not in x]
如果你愿意,你可以重写 csv 文件
而不是使用csv
,你应该使用Pandas
模块,像这样。
import pandas as pd
df = pd.read_csv('file.csv')
print(df)
index = 1 #index of the row that you want to remove
df = df.drop(index)
print(df)
df.to_csv('file.csv')
由于 CSV 阅读器呈现数据行的方式,您需要知道原始 CSV 文件中有多少列。 例如,如果 CSV 文件内容如下所示:
1,2
3,
4
然后通过遍历读取器返回的列表将如下所示:
['1','2']
['3','']
['4']
如您所见,第三行只有一列,而第一行和第二行有两列,尽管其中一列(实际上)是空的。
这个 function 允许您指定列数(如果您事先知道它们)或允许 function 计算出来。 如果未指定,则假定列数是在任何行中找到的最大列数。
所以...
import csv
DELIMITER = ','
def valid_column(col):
try:
return float(col) != 0
except ValueError:
pass
return len(col.strip()) > 0
def fix_csv(input_file, output_file, cols=0):
if cols == 0:
with open(input_file, newline='') as indata:
cols = max(len(row) for row in csv.reader(indata, delimiter=DELIMITER))
with open(input_file, newline='') as indata, open(output_file, 'w', newline='') as outdata:
writer = csv.writer(outdata, delimiter=DELIMITER)
for row in csv.reader(indata, delimiter=DELIMITER):
if len(row) == cols:
if all(valid_column(col) for col in row):
writer.writerow(row)
fix_csv('original.csv', 'fixed.csv')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.