检查字符串是否在pandas数据帧中

use*_*044 47 python python-2.7 pandas

我想看看我的数据帧中的特定列中是否存在特定字符串.

我收到了错误

ValueError:Series的真值是不明确的.使用a.empty,a.bool(),a.item(),a.any()或a.all().

import pandas as pd

BabyDataSet = [('Bob', 968), ('Jessica', 155), ('Mary', 77), ('John', 578), ('Mel', 973)]

a = pd.DataFrame(data=BabyDataSet, columns=['Names', 'Births'])

if a['Names'].str.contains('Mel'):
    print "Mel is there"
Run Code Online (Sandbox Code Playgroud)

Uri*_*ren 60

a['Names'].str.contains('Mel') 将返回布尔值大小的指标向量 len(BabyDataSet)

因此,你可以使用

mel_count=a['Names'].str.contains('Mel').sum()
if mel_count>0:
    print ("There are {m} Mels".format(m=mel_count))
Run Code Online (Sandbox Code Playgroud)

或者any(),如果您不关心与您的查询匹配的记录数

if a['Names'].str.contains('Mel').any():
    print ("Mel is there")
Run Code Online (Sandbox Code Playgroud)

  • 如果 `a['Names']` 中有 NaN 值,请使用 `contains()` 函数的 `na` 参数。https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.contains.html (3认同)

Zer*_*ero 21

你应该用 any()

In [98]: a['Names'].str.contains('Mel').any()
Out[98]: True

In [99]: if a['Names'].str.contains('Mel').any():
   ....:     print "Mel is there"
   ....:
Mel is there
Run Code Online (Sandbox Code Playgroud)

a['Names'].str.contains('Mel') 给你一系列bool值

In [100]: a['Names'].str.contains('Mel')
Out[100]:
0    False
1    False
2    False
3    False
4     True
Name: Names, dtype: bool
Run Code Online (Sandbox Code Playgroud)


小智 17

OP 旨在找出字符串 'Mel' 是否存在于特定列中,而不包含在该列中的任何字符串中。因此,不需要使用contains,而且效率不高。

一个简单的等于就足够了:

df = pd.DataFrame({"names": ["Melvin", "Mel", "Me", "Mel", "A.Mel"]})

mel_count = (df['names'] == 'Mel').sum() 
print("There are {num} instances of 'Mel'. ".format(num=mel_count)) 
 
mel_exists = (df['names'] == 'Mel').any() 
print("'Mel' exists in the dataframe.".format(num=mel_exists)) 

mel_exists2 = 'Mel' in df['names'].values 
print("'Mel' is in the dataframe: " + str(mel_exists2)) 
Run Code Online (Sandbox Code Playgroud)

印刷:

There are 2 instances of 'Mel'. 
'Mel' exists in the dataframe.
'Mel' is in the dataframe: True
Run Code Online (Sandbox Code Playgroud)

  • 类似的解决方案: (a['Names'].eq('Mel')).any() (2认同)

Chr*_*ian 10

我遇到了同样的问题,我使用了:

if "Mel" in a["Names"].values:
    print("Yep")
Run Code Online (Sandbox Code Playgroud)

但这个解决方案可能会更慢,因为 pandas 内部从 Series 创建一个列表。