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