df = pd.read_csv('my.csv', error_bad_lines=False, sep='\t', header=None, names=['A', 'B', 'C', 'D'])
现在,字段C包含字符串值.但在某些行中存在非字符串类型(浮点数或数字)值.如何删除这些行?我正在使用Pandas版本0.18.1.
解决方法:
建立
df = pd.DataFrame([['a', 'b', 'c', 'd'], ['e', 'f', 1.2, 'g']], columns=list('ABCD'))
print df
A B C D
0 a b c d
1 e f 1.2 g
请注意,您可以查看各个单元格类型.
print type(df.loc[0, 'C']), type(df.loc[1, 'C'])
<type 'str'> <type 'float'>
面具和切片
print df.loc[df.C.apply(type) != float]
A B C D
0 a b c d
更一般
print df.loc[df.C.apply(lambda x: not isinstance(x, (float, int)))]
A B C D
0 a b c d
你也可以使用float来判断它是否可以是一个浮点数.
def try_float(x):
try:
float(x)
return True
except:
return False
print df.loc[~df.C.apply(try_float)]
A B C D
0 a b c d
这种方法的问题是你将排除可以解释为浮点数的字符串.
比较我提供的几个选项的时间,以及jezrael的小数据帧解决方案.
对于具有500,000行的数据帧:
检查它的类型是否是浮点数似乎是最有效的,它背后是数字.如果你需要检查int和float,我会选择jezrael的回答.如果你可以逃脱检查浮动,使用那个.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。