gpt4 book ai didi

unix - CSV - 删除任何列为空的行

转载 作者:行者123 更新时间:2023-12-01 09:49:10 25 4
gpt4 key购买 nike

我正在玩 Kaggle 的泰坦尼克号数据集。我想从 train.csv 中删除任何具有空列的行(我知道这不是处理丢失数据的最佳方法,但无论如何这个问题对我来说都很有趣)。

我想采用这种 Unix 类型的方式(使用 awk、sed 或 grep 之类的工具),因为我正努力在这些工具上做得更好,但我什至不确定从哪里开始。

数据示例:

PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked
1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S
2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC 17599,71.2833,C85,C
3,1,3,"Heikkinen, Miss. Laina",female,26,0,0,STON/O2. 3101282,7.925,,S

在第二行,cabin 是空的,所以我想从文件中删除它。

请注意,第四列有时包含逗号,但该列始终包含在双引号中。

旁白:

我还想知道如何仅针对特定列执行此操作,但如果这个问题的答案不能帮助我回答那个问题,我可以将其作为一个单独的问题提出。

最佳答案

我会坚持使用具有 的语言解析器,因为双引号内的那些逗号可能会有问题。并且更容易扩展以比较特定列。这里是例子。它从标题中提取字段数并比较每行的字段数以决定是否打印:

import sys 
import csv

with open(sys.argv[1], 'r', newline='') as csvfile:
csvreader = csv.reader(csvfile)
csvwriter = csv.writer(sys.stdout)
row = next(csvreader)
fields = len(row)
csvwriter.writerow(row)
for row in csvreader:
l = len(list(filter(str.strip, row)))
if l < fields: continue
csvwriter.writerow(row)

假设代码在名为 script.py 的文件中,运行如下:

python script.py infile

产生:

PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked
2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC 17599,71.2833,C85,C

关于unix - CSV - 删除任何列为空的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19214587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com