在python中从csv文件中删除不需要的值

2024-10-05 13:25:54 发布

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

我有一个csv文件,其中包含一些none值,我希望删除那些包含所有none值的列

Name class  marks1 marks2

A    10th   67     55
B    10th   None   None
C    10th   43     None      

在上表中,我需要删除B,因为所有标记都是none,并使用剩余的学生创建一个新表。我需要一个更新的csv文件

Name class  marks1 marks2

A    10th   67     55
C    10th   43     None   

我试过这个:

import csv
lines = list()
with open('f_name', 'r') as readFile:
   reader = csv.reader(readFile)
   for row in reader:
       lines.append(row)
       #print(row[4:])
       if row[2:] == 'None':
       print(row)

with open(f_name, 'w') as writeFile:
    writer = csv.writer(writeFile)
    writer.writerows(lines)

Tags: 文件csvnamenonewithopenclassreader
2条回答

您可以筛选标记1和标记2均不为空的行

import pandas as pd

df1=pd.read_csv('f_name')
df2=df1[~(pd.isnull(df1.marks1) & pd.isnull(df1.marks2))]

if row[2:] == 'None'只需检查数组切片是否等于字符串,当然永远不会等于字符串

if any(x != 'None' for x in row[2:]):

在数组切片上循环并检查是否至少有一个元素不等于字符串'None'

当然,只有当条件为true时,才需要append该行

更经济的方法是一次读写一行

import csv

with open('f_name', 'r') as readFile, open('f_name_new.csv', 'w') as writeFile:
   reader = csv.reader(readFile)
   writer = csv.writer(writeFile)
   for row in reader:
       if any(x != 'None' for x in row[2:]):
           writer.writerow(row)

您不能同时读取和写入同一文件,因此这将为输出文件使用不同的名称。如果您像最初的方法一样将所有行读入内存,那么一旦内存中有了所有数据,您当然可以覆盖原始文件。缺点是您只能使用适合内存的文件;对于大文件,这往往会变得很慢

相关问题 更多 >

    热门问题