繁体   English   中英

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

[英]remove unwanted values from csv file in python

我有一个 csv 文件,它有一些 none 值,我想删除那些具有所有 none 值的列。

Name class  marks1 marks2

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

在上表中,我需要删除 B,因为所有标记都没有,并使用剩余的学生创建一个新表。 并输出我需要一个像这样更新的 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)

您可以过滤 mark1 和 mark2 都不为空的行

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'

当然,只有当条件为真时,您才会想要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)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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