gpt4 book ai didi

python - 如何在 Pandas DATAFRAME 中查找列值具有特定数据类型的行

转载 作者:行者123 更新时间:2023-11-28 22:37:36 31 4
gpt4 key购买 nike

我有一个数据框

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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com