在列pandas python中获取非数字行 [英] get non numerical rows in a column pandas python
本文介绍了在列pandas python中获取非数字行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我检查了以下帖子:在熊猫? 但这并不能真正回答我的问题.
I checked this post: finding non-numeric rows in dataframe in pandas? but it doesn't really answer my question.
我的样本数据:
import pandas as pd
d = {
'unit': ['UD', 'UD', 'UD', 'UD', 'UD','UD'],
'N-D': [ 'Q1', 'Q2', 'Q3', 'Q4','Q5','Q6'],
'num' : [ -1.48, 1.7, -6.18, 0.25, 'sum(d)', 0.25]
}
df = pd.DataFrame(d)
它看起来像这样:
N-D num unit
0 Q1 -1.48 UD
1 Q2 1.70 UD
2 Q3 -6.18 UD
3 Q4 0.25 UD
4 Q5 sum(d) UD
5 Q6 0.25 UD
我只想过滤掉"NUM"列中非数字的行.我只希望所有包含"num"列非数字值的行的所有列.
I want to filter out only the rows in column 'num' that are NON-NUMERIC. I want all of the columns for only the rows that contain non-numeric values for column 'num'.
所需的输出:
N-D num unit
4 Q5 sum(d) UD
我的尝试:
nonnumeric=df[~df.applymap(np.isreal).all(1)] #didn't work, it pulled out everything, besides i want the condition to check only column 'num'.
nonnumeric=df['num'][~df.applymap(np.isreal).all(1)] #didn't work, it pulled out all the rows for column 'num' only.
推荐答案
使用 to_numeric
+ isnull
注意:此解决方案无法找到或过滤保存为字符串的数字:例如'1'或'22'
Use boolean indexing
with mask created by to_numeric
+ isnull
Note: This solution does not find or filter numbers saved as strings: like '1' or '22'
print (pd.to_numeric(df['num'], errors='coerce'))
0 -1.48
1 1.70
2 -6.18
3 0.25
4 NaN
5 0.25
Name: num, dtype: float64
print (pd.to_numeric(df['num'], errors='coerce').isnull())
0 False
1 False
2 False
3 False
4 True
5 False
Name: num, dtype: bool
print (df[pd.to_numeric(df['num'], errors='coerce').isnull()])
N-D num unit
4 Q5 sum(d) UD
具有isinstance
和apply
的另一种解决方案:
Another solution with isinstance
and apply
:
print (df[df['num'].apply(lambda x: isinstance(x, str))])
N-D num unit
4 Q5 sum(d) UD
这篇关于在列pandas python中获取非数字行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文