在CSV文件中使用Python删除行

bjp0bcyl  于 11个月前  发布在  Python
关注(0)|答案(4)|浏览(96)

我想做的就是删除第三列中值为'0'的行。数据的示例如下:

6.5, 5.4, 0, 320
6.5, 5.4, 1, 320

字符串
因此,第一行需要删除,而第二行将保留。
到目前为止,我所做的如下:

import csv
input = open('first.csv', 'rb')
output = open('first_edit.csv', 'wb')
writer = csv.writer(output)
for row in csv.reader(input):
    if row[2]!=0:
        writer.writerow(row)
input.close()
output.close()


任何帮助都会很好

iqxoj9l9

iqxoj9l91#

你很接近了;目前你比较row[2]和整数0,比较字符串"0"。当你从一个文件中读取数据时,它是一个字符串而不是一个整数,所以这就是为什么你的整数检查目前失败:

row[2]!="0":

字符串
此外,你可以使用with关键字来使当前代码稍微更pythonic一些,这样你的代码中的行就减少了,你可以省略.close语句:

import csv
with open('first.csv', 'rb') as inp, open('first_edit.csv', 'wb') as out:
    writer = csv.writer(out)
    for row in csv.reader(inp):
        if row[2] != "0":
            writer.writerow(row)


注意,input是Python内置的,所以我使用了另一个变量名。

  • 编辑 *:csv文件行中的值用逗号 * 和 * 空格分隔;在普通的csv中,它们只是用逗号分隔,并且检查"0"就可以了,所以你可以使用strip(row[2]) != 0,也可以检查" 0"

更好的解决方案是更正csv格式,但如果您想保留当前格式,以下内容将适用于给定的csv文件格式:

$ cat test.py 
import csv
with open('first.csv', 'rb') as inp, open('first_edit.csv', 'wb') as out:
    writer = csv.writer(out)
    for row in csv.reader(inp):
        if row[2] != " 0":
            writer.writerow(row)
$ cat first.csv 
6.5, 5.4, 0, 320
6.5, 5.4, 1, 320
$ python test.py 
$ cat first_edit.csv 
6.5, 5.4, 1, 320

qgzx9mmu

qgzx9mmu2#

使用pandas惊人的库:
问题的解决方案:

import pandas as pd

df = pd.read_csv(file)
df =  df[df.name != "dog"] 

# df.column_name != whole string from the cell
# now, all the rows with the column: Name and Value: "dog" will be deleted

df.to_csv(file, index=False)

字符串

通用通用解决方案:

使用此功能:

def remove_specific_row_from_csv(file, column_name, *args):
    '''
    :param file: file to remove the rows from
    :param column_name: The column that determines which row will be 
           deleted (e.g. if Column == Name and row-*args
           contains "Gavri", All rows that contain this word will be deleted)
    :param args: Strings from the rows according to the conditions with 
                 the column
    '''
    row_to_remove = []
    for row_name in args:
        row_to_remove.append(row_name)
    try:
        df = pd.read_csv(file)
        for row in row_to_remove:
            df = df[eval("df.{}".format(column_name)) != row]
        df.to_csv(file, index=False)
    except Exception  as e:
        raise Exception("Error message....")


功能实现:

remove_specific_row_from_csv(file_name, "column_name", "dog_for_example", "cat_for_example")

**注意:**在此函数中,您可以发送无限的字符串单元格,并且所有这些行都将被删除(假设它们存在于发送的单列中)。

dwthyt8l

dwthyt8l3#

你应该有if row[2] != "0"。否则它不会检查字符串值是否等于0。

2w2cym1i

2w2cym1i4#

你可以使用这个来删除csv中的行:

import csv

with open("employees.csv", "r") as f:
    reader = csv.reader(f)
    rows_keep = [row for row in reader if row[0] != "11111111"]

with open("employees.csv", "w", newline="") as wrt:
    writer = csv.writer(wrt)
    for row in rows_keep:
        writer.writerow(row)

字符串

相关问题