【发布时间】:2017-08-08 14:00:36
【问题描述】:
我有数据集,我在其中读取数据,df.dir.value_counts() 返回
169 23042
170 22934
168 22873
316 22872
315 22809
171 22731
317 22586
323 22561
318 22530
...
0.069 1
0.167 1
0557 1
0.093 1
1455 1
0.130 1
0.683 1
2211 1
3.714 1
1.093 1
0819 1
0.183 1
0.110 1
2241 1
0.34 1
0.330 1
0.563 1
60+9 1
0.910 1
0.232 1
1410 1
0.490 1
0.107 1
1.257 1
1704 1
0.491 1
1.180 1
5-230 1
1735 1
1.384 1
dir 列是关于方向的,数据应该是整数,范围从(0,361)。如您所见,value_counts() 列表末尾有很多错误数据。
我想知道,如何删除非整数数据?
有一些可能的方法
1.read_csv 为整数并抛出所有非整数数据
df = pd.read_csv("/data.dat", names = ['time', 'dir'], dtype={'dir': int}})
但是,有一些类似错误数据的字符串,例如60+9,会导致错误。不知道怎么处理。
2.通过isdigit()选择,然后向下转型
df = df[df['dir'].apply(lambda x: str(x).isdigit())]
df['dir']=pd.to_numeric(df['dir'], downcast='integer', errors='coerce')
这是来自Drop rows if value in a specific column is not an integer in pandas dataframe,对我来说效果很好,但感觉有点太多了。我想知道是否有更好的方法?
【问题讨论】:
标签: python pandas data-cleaning