微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Pandas的列中删除不包含字符串类型的行?

我有一个包含四列的csv文件.我这样看了:

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的小数据帧解决方案.

enter image description here

对于具有500,000行的数据帧:

enter image description here

检查它的类型是否是浮点数似乎是最有效的,它背后是数字.如果你需要检查int和float,我会选择jezrael的回答.如果你可以逃脱检查浮动,使用那个.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐