检查字符串是否在熊猫数据框中


69

我想看看数据框内的特定列中是否存在特定的字符串。

我遇到了错误

ValueError:系列的真值不明确。使用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"

Answers:


103

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))

或者any(),如果您不在乎有多少条记录与您的查询匹配

if a['Names'].str.contains('Mel').any():
    print ("Mel is there")

3
如果中有NaN值a['Names'],请使用函数的na参数contains()pandas.pydata.org/pandas-docs/stable/reference/api/...
桑德范登Hautte

28

你应该用 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

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

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

8

看来,OP的目的是找出字符串“ Mel”是否存在于特定列中,而不是包含在列中,因此不需要使用contains,而且效率不高。一个简单的等于就足够了:

(a['Names']=='Mel').any()

1
一个类似的解决方案:(a ['Names']。eq('Mel'))。any()
ivegotaquestion

2

如果有可能需要搜索空字符串,

    a['Names'].str.contains('') 

将不起作用,因为它将始终返回True。

相反,使用

    if '' in a["Names"].values

以准确反映一个字符串是否在系列中,包括搜索空字符串的边缘情况。


1

我碰到过同样的问题,我曾经使用过:

if "Mel" in a["Names"].values:
    print("Yep")

但是此解决方案可能会比较慢,因为内部大熊猫会从系列中创建列表。



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.