使用pandas删除一列中的非数字行

使用pandas删除一列中的非数字行,第1张

概述有一个如下所示的数据框,它有一个不干净的列’id’,它应该是数字列 id, name1, A2, B3, Ctt, D4, E5, Fde, G 是否有一种简洁的方法来删除行,因为tt和de不是数值 tt,Dde,G 使数据帧干净? id, name1, A2, B3, C4, E5, F 您可以使用字符串 isnumeric的标准方法并将其应用于id 有一个如下所示的数据框,它有一个不干净的列’ID’,它应该是数字列

ID,name1,A2,B3,Ctt,D4,E5,Fde,G

是否有一种简洁的方法来删除行,因为tt和de不是数值

tt,Dde,G

使数据帧干净?

ID,C4,F
解决方法 您可以使用字符串 isnumeric的标准方法并将其应用于ID列中的每个值:

import pandas as pdfrom io import StringIOdata = """ID,G"""df = pd.read_csv(StringIO(data))In [55]: dfOut[55]:    ID name0   1    A1   2    B2   3    C3  tt    D4   4    E5   5    F6  de    GIn [56]: df[df.ID.apply(lambda x: x.isnumeric())]Out[56]:   ID name0  1    A1  2    B2  3    C4  4    E5  5    F

或者如果你想使用ID作为索引,你可以这样做:

In [61]: df[df.ID.apply(lambda x: x.isnumeric())].set_index('ID')Out[61]:    nameID     1     A2     B3     C4     E5     F

编辑.添加时间

虽然pd.to_numeric的情况不使用apply方法,但它几乎比为str列应用np.isnumeric慢两倍.此外,我添加了使用pandas str.isnumeric的选项,它更少输入,然后使用pd.to_numeric更快.但pd.to_numeric更通用,因为它可以使用任何数据类型(不仅仅是字符串).

df_big = pd.concat([df]*10000)In [3]: df_big = pd.concat([df]*10000)In [4]: df_big.shapeOut[4]: (70000,2)In [5]: %timeit df_big[df_big.ID.apply(lambda x: x.isnumeric())]15.3 ms ± 2.02 ms per loop (mean ± std. dev. of 7 runs,10 loops each)In [6]: %timeit df_big[df_big.ID.str.isnumeric()]20.3 ms ± 171 µs per loop (mean ± std. dev. of 7 runs,10 loops each)In [7]: %timeit df_big[pd.to_numeric(df_big['ID'],errors='coerce').notnull()]29.9 ms ± 682 µs per loop (mean ± std. dev. of 7 runs,10 loops each)
总结

以上是内存溢出为你收集整理的使用pandas删除一列中的非数字行全部内容,希望文章能够帮你解决使用pandas删除一列中的非数字行所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1191098.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存