看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
我们有一个 DataFrame,其中有一个列需要我们重点关注,如它的数据为非数字类型,则删除这行的数据。我们来看看 pandas 如何完成。
我们的数据构造如下:
import pandas as pd
import io
data = '''
EID Name
123 Madsen,Gunnar
ret Greene,Richard
465 Stull,Matthew
'''
df = pd.read_csv(io.StringIO(data), sep=r'\s+')
df
'''
EID Name
0 123 Madsen,Gunnar
1 ret Greene,Richard
2 465 Stull,Matthew
'''
注意 EID 列,索引 1 行的值为非数字,我们需要将这部分剔除,保留其它为数字的数据行。
我们可以用字符串的 str.isdecimal
方法来判断这个字符串是否一个数字,得到一个布尔序列,然后再用这个布尔序列来抽取整体 DataFrame 数据。
判断数据是否数字:
df.EID.apply(str.isdecimal)
'''
0 True
1 False
2 True
Name: EID, dtype: bool
'''
将布尔序列来抽取整体 DataFrame 数据:
df[df.EID.apply(str.isdecimal)]
'''
EID Name
0 123 Madsen,Gunnar
2 465 Stull,Matthew
'''
以下是分别用 pd.to_numeric()
函数和正则表达式的两种方法。
df[pd.to_numeric(df.EID, errors='coerce').notna()]
df[df.EID.str.match(r'\d+')] # 推荐!
这样就完成了需求。
(完)
更新时间:Aug. 18, 2024, 4:18 p.m. 标签:pandas python 数字