作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个数据框
name col1
satya 12
satya abc
satya 109.12
alex apple
alex 1000
所以现在我需要显示“col1”列中有 int 值的行。O/p 看起来像
name col1
satya 12
alex 1000
如果搜索字符串值
name col1
satya abc
alex apple
明智的..请建议一些代码行(可能正在使用 reg)。
最佳答案
让我们从一个简单的正则表达式开始,如果您有一个整数,它将计算为 True
,否则为 False
:
import re
regexp = re.compile('^-?[0-9]+$')
bool(regexp.match('1000'))
True
bool(regexp.match('abc'))
False
一旦你有了这样的正则表达式,你就可以进行如下操作:
mask = df['col1'].map(lambda x: bool(regexp.match(x)) )
df.loc[mask]
name col1
0 satya 12
4 alex 1000
要搜索字符串,您需要执行以下操作:
regexp_str = re.compile('^[a-zA-Z]+$')
mask_str = df['col1'].map(lambda x: bool(regexp_str.match(x)))
df.loc[mask_str]
name col1
1 satya abc
3 alex apple
编辑
如果 dataframe 是由以下人员创建的,则上述代码将有效:
df = pd.read_clipboard()
(或者,所有变量都作为字符串提供)。
正则表达式方法是否有效取决于 df
的创建方式。例如,如果它是通过以下方式创建的:
df = pd.DataFrame({'name': ['satya','satya','satya', 'alex', 'alex'],
'col1': [12,'abc',109.12,'apple',1000] },
columns=['name','col1'])
上面的代码会失败并返回 TypeError: expected string or bytes-like object
要使其在任何情况下都能正常工作,需要将类型显式强制转换为 str
:
mask = df['col1'].astype('str').map(lambda x: bool(regexp.match(x)) )
df.loc[mask]
name col1
0 satya 12
4 alex 1000
字符串也一样:
regexp_str = re.compile('^[a-zA-Z]+$')
mask_str = df['col1'].astype('str').map(lambda x: bool(regexp_str.match(x)))
df.loc[mask_str]
name col1
1 satya abc
3 alex apple
EDIT2
要找到一个 float :
regexp_float = re.compile('^[-\+]?[0-9]*(\.[0-9]+)$')
mask_float = df['col1'].astype('str').map(lambda x: bool(regexp_float.match(x)))
df.loc[mask_float]
name col1
2 satya 109.12
关于python - 如何在 Pandas DATAFRAME 中查找列值具有特定数据类型的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36382248/
我是一名优秀的程序员,十分优秀!