使用pandas删除一列中的非数字行
发布时间:2020-12-20 10:34:23 所属栏目:Python 来源:网络整理
导读:有一个如下所示的数据框,它有一个不干净的列’id’,它应该是数字列 id,name1,A2,B3,Ctt,D4,E5,Fde,G 是否有一种简洁的方法来删除行,因为tt和de不是数值 tt,Dde,G 使数据帧干净? id,C4,F 解决方法 您可以使用字符串 isnumeric 的标准方法并将其应用于id列中
有一个如下所示的数据框,它有一个不干净的列’id’,它应该是数字列
id,name 1,A 2,B 3,C tt,D 4,E 5,F de,G 是否有一种简洁的方法来删除行,因为tt和de不是数值 tt,D de,G 使数据帧干净? id,C 4,F 解决方法
您可以使用字符串
isnumeric 的标准方法并将其应用于id列中的每个值:
import pandas as pd from io import StringIO data = """ id,G """ df = pd.read_csv(StringIO(data)) In [55]: df Out[55]: id name 0 1 A 1 2 B 2 3 C 3 tt D 4 4 E 5 5 F 6 de G In [56]: df[df.id.apply(lambda x: x.isnumeric())] Out[56]: id name 0 1 A 1 2 B 2 3 C 4 4 E 5 5 F 或者如果你想使用id作为索引,你可以这样做: In [61]: df[df.id.apply(lambda x: x.isnumeric())].set_index('id') Out[61]: name id 1 A 2 B 3 C 4 E 5 F 编辑.添加时间 虽然pd.to_numeric的情况不使用apply方法,但它几乎比为str列应用np.isnumeric慢两倍.此外,我添加了使用pandas df_big = pd.concat([df]*10000) In [3]: df_big = pd.concat([df]*10000) In [4]: df_big.shape Out[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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |