Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas-如何删除包含少于标题的字段的行_Python_Pandas_Csv - Fatal编程技术网

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

Python Pandas-如何删除包含少于标题的字段的行,python,pandas,csv,Python,Pandas,Csv,在csv中,如果行中包含的字段比标题多,则会正确地将其出错,但即使没有尾随的,指示空字段,也会将NaN添加到包含较少字段的行中 我的csv: id,name,pin,city 1,abc,123,SJ 2,xyz,789 3,pqr,456,AL 4,qwe,345, 当我试图通过pandas阅读此内容时: >>> import pandas >>> a = pandas.read_csv('test.csv', error_bad_lines=False)

在csv中,如果行中包含的字段比标题多,则会正确地将其出错,但即使没有尾随的
指示空字段,也会将
NaN
添加到包含较少字段的行中

我的csv:

id,name,pin,city
1,abc,123,SJ
2,xyz,789
3,pqr,456,AL
4,qwe,345,
当我试图通过pandas阅读此内容时:

>>> 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
>>> 

在这里,第4行用城市值中的
NaN
读取,这是正确的,因为上次
表示一个空字段。但是第2行应该出错/不读入数据帧。有什么方法可以实现这一点吗?

您可以对“查找长度不相等的行”的值进行预处理,并在以下位置传递到参数
skiprows


这里回答了一个类似的问题:如果这是最后一次,我将使用csv本身来处理我的数据,而不是熊猫solution@MohitC-添加了另一个解决方案。我看不出来?您的解决方案仍然使用csv模块进行预处理。双倍于我的complexity@MohitC这是我找到的最好的,但请自由等待另一个答案。
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