繁体   English   中英

如果单元格为空,如何使用 Python 删除 CSV 文件中的一行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM