pandas怎么去除含有非数字的行

题目描述

在用pandas数据处理时遇到一个问题,譬如一个数据,某一列的数据有[1,2,3,5,6,'1_','ra','n','ssa']
我要去除'1_','ra','n','ssa'这些不是全数字的行。最麻烦的是,这个数据还不全是int或者float格式,还有str格式,哪怕明明是数字的,因此很多操作都会报错,试过用isdigit()等方法。请教一下高手,如何解决,谢谢!

阅读 12.5k
1 个回答

假设数据集的名字为 df,需要处理的列为 data
可以进行以下处理:

In [1]: import re

In [2]: import pandas as pd

In [3]: import numpy as np

In [4]: d = ['94`','9+0','9+','9+','99','98','9*7',10,12,'1_','ra','n','ssa']

In [5]: data = {'a':d}

In [6]: df = pd.DataFrame(data)

In [7]: new_df = df['a'].apply(lambda x: x if re.search("^\d+$", str(x)) else np.nan)

In [8]: new_df
Out[8]:
0     NaN
1     NaN
2     NaN
3     NaN
4      99
5      98
6     NaN
7      10
8      12
9     NaN
10    NaN
11    NaN
12    NaN
Name: a, dtype: object

In [9]: new_df.dropna()
Out[9]:
4    99
5    98
7    10
8    12
Name: a, dtype: object
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题