Python 从dataframe中删除字符串中包含数值的行

Python 从dataframe中删除字符串中包含数值的行,python,pandas,Python,Pandas,我有一个熊猫数据框,有两列,类型和文本 文本列包含字符串值。 如何删除文本列中包含一些数值的行。 e、 g: 我在下面尝试过,但出现了一个错误。知道这是为什么会出错吗 df.drop(df[bool(re.match('^(?=.*[0-9]$)', df['text'].str))].index) 假设您将数值定义为x.isdigit()求值为True,则可以将任何与生成器表达式一起使用,并通过pd.Series.apply创建布尔掩码: s = pd.Series(['ABC', 'ABC

我有一个熊猫数据框,有两列,类型和文本 文本列包含字符串值。 如何删除文本列中包含一些数值的行。 e、 g:

我在下面尝试过,但出现了一个错误。知道这是为什么会出错吗

df.drop(df[bool(re.match('^(?=.*[0-9]$)', df['text'].str))].index)

假设您将数值定义为
x.isdigit()
求值为
True
,则可以将
任何
与生成器表达式一起使用,并通过
pd.Series.apply创建布尔掩码:

s = pd.Series(['ABC', 'ABC 1.3.2', 'DEF', 'ABC12', '2.2.3', 'ABC 12 1', 'GHI'])

mask = s.apply(lambda x: not any(i.isdigit() for i in x))

print(s[mask])

0    ABC
2    DEF
6    GHI
dtype: object

在您的情况下,我认为最好使用简单的索引,而不是删除。例如:

>>> df
       text type
0       abc    b
1    abc123    a
2       cde    a
3  abc1.2.3    b
4     1.2.3    a
5       xyz    a
6    abc123    a
7      9999    a
8     5text    a
9      text    a


>>> df[~df.text.str.contains(r'[0-9]')]
   text type
0   abc    b
2   cde    a
5   xyz    a
9  text    a
查找没有数字文本的任何行的

解释:

df.text.str.contains(r'[0-9]')
返回包含任意数字的布尔序列:

0    False
1     True
2    False
3     True
4     True
5    False
6     True
7     True
8     True
9    False
您可以将其与
~
一起使用,在从jpp返回假数据的地方索引数据帧

s[s.str.isalpha()]
Out[261]: 
0    ABC
2    DEF
6    GHI
dtype: object

正如我在评论中问的,你对数字的定义是什么。如果我们使用
split()
遵循python的
isnumeric
,我们会得到以下结果:

import pandas as pd
作为pd进口熊猫

df = pd.DataFrame({
    'col1': ['ABC', 'ABC 1.3.2', 'DEF', 'ABC12', '2.2.3', 'ABC 12 1', 'GHI']
})

m1 = df['col1'].apply(lambda x: not any(i.isnumeric() for i in x.split()))
m2 = df['col1'].str.isalpha()
m3 = df['col1'].apply(lambda x: not any(i.isdigit() for i in x))
m4 = ~df['col1'].str.contains(r'[0-9]')

print(df.assign(hasnonumeric=m1,isalhpa=m2, isdigit=m3, contains=m4))

# Opting for hasnonumeric
df = df[m1]
印刷品:

        col1  hasnonumeric  isalhpa  isdigit  contains
0        ABC          True     True     True      True
1  ABC 1.3.2          True    False    False     False
2        DEF          True     True     True      True
3      ABC12          True    False    False     False
4      2.2.3          True    False    False     False
5   ABC 12 1         False    False    False     False
6        GHI          True     True     True      True

数字的定义是什么?字符串中的任何数字。例如“ABCD12”、“abc1.3”、“abc1.3.3”、“abc12”。据我所知,这些不是数字,而是数字。虽然这是一个定义问题,但最终你正在寻求答案。看起来不错,但值得注意的是其含义,例如,任何带有
-
的内容都将被省略;i、 这模仿了Python
str.isalpha
。是的,这对我很有用!谢谢我只是想检查字符串是否包含任何数字字符,如1.2、1或1.2.1等。这给了我以下错误:
TypeError:一元数的操作数类型错误~:“float”
。我的列
dtype
object
。我假设这意味着其中混合了数字和字符串(加载了
read\u csv
)。在4个选项中,contains适合我的情况。如果字符串包含特殊字符,则isalpha将返回false,如.,'等等。我只想检查是否存在数字字符(1或1.2或1.2.1或1.2.1.2等),然后过滤掉数据帧。好的,很好。但这不是我的答案
        col1  hasnonumeric  isalhpa  isdigit  contains
0        ABC          True     True     True      True
1  ABC 1.3.2          True    False    False     False
2        DEF          True     True     True      True
3      ABC12          True    False    False     False
4      2.2.3          True    False    False     False
5   ABC 12 1         False    False    False     False
6        GHI          True     True     True      True