Python Pandas-如何删除包含少于标题的字段的行
在csv中,如果行中包含的字段比标题多,则会正确地将其出错,但即使没有尾随的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)
,
指示空字段,也会将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