Pandas - 如何删除包含比标题少的字段的行

问题描述 投票:1回答:1

Pandas正确地错误输出包含比csv中的标题更多的字段的行,但是它将NaN添加到包含较小字段的行,即使没有尾随的,指示空字段。

我的csv:

id,name,pin,city
1,abc,123,SJ
2,xyz,789
3,pqr,456,AL
4,qwe,345,

当我尝试通过熊猫阅读时:

>>> import pandas
>>> a = pandas.read_csv('test.csv', error_bad_lines=False)
>>> a
   id name  pin city
0   1  abc  123   SJ
1   2  xyz  789  NaN
2   3  pqr  456   AL
3   4  qwe  345  NaN
>>> 

这里使用城市值中的NaN读取第4行,这是正确的,因为最后一个,表示空字段。但第2行应该错误输出/不读入数据帧。有没有办法实现这个目标?

python pandas csv
1个回答
1
投票

您可以预处理查找行长度不相等的值,并传递给skiprows中的参数read_csv

out = []
with open('test.csv', 'r') as csvfile:
    reader = csv.reader(csvfile)
    head = next(reader)
    for i, row in enumerate(reader):
        if len(row) != len(head):
            out.append(i)
print (out)
[1]

df = pd.read_csv('test.csv', skiprows=np.array(out) + 1)
print(df)
   id name  pin city
0   1  abc  123   SJ
1   3  pqr  456   AL
2   4  qwe  345  NaN
© www.soinside.com 2019 - 2024. All rights reserved.