python-按部分字符串值选择错误

python-按部分字符串值选择错误,python,pandas,Python,Pandas,我有一个正在加载到数据帧中的csv。我只需要Organization列包含目标字符串affiliation的行 当我尝试使用str.contains()时,我得到ValueError:无法使用包含NA/NaN值的向量进行索引 我已经研究了和以下解决方案,它们都对我有效: df = df[df['Organization'].str.contains(affiliation)==True] 或 但是,作为一项测试,我做了以下几点: print(len(df)) #99228 df = df[pd

我有一个正在加载到数据帧中的csv。我只需要
Organization
列包含目标字符串
affiliation
的行

当我尝试使用
str.contains()
时,我得到
ValueError:无法使用包含NA/NaN值的向量进行索引

我已经研究了和以下解决方案,它们都对我有效:

df = df[df['Organization'].str.contains(affiliation)==True]

但是,作为一项测试,我做了以下几点:

print(len(df)) #99228
df = df[pd.notnull(df['Organization'])] #or df = df.dropna(subset=['Organization'])
print(len(df)) #99228
df = df[df['Organization'].str.contains(affiliation).fillna(False)]
print(len(df)) #1605
我的问题是:附加到
str.contains()
ValueError
没有
==True
fillna(False)
。但是,为什么在只保留非空的
组织
行之后,我会得到相同大小的df?我错过了什么


谢谢

检查您的专栏内容
组织机构
。它很可能包含字符串和其他数据类型。因此,
df['Organization'].str.contains(affiliation)
将这些值与其他数据类型一起生成
NaN
。您不能使用
NaN
进行索引,但需要将其转换为
False

您需要指定
str.contains('affiliation',na=False)
。[]

[1]中的
:将熊猫作为pd导入
在[2]中:将numpy作为np导入
在[3]中:s=pd.Series(['foo','bar',np.nan,'this containment','baz',np.nan])
在[4]中:s.str.contains('affiliation')
出[4]:
0错误
1错误
2楠
3正确
4错误
5南
数据类型:对象
在[5]中:s.str.contains('affiliation',na=False)
出[5]:
0错误
1错误
2错误
3正确
4错误
5错误
数据类型:bool

然后,您可以使用该布尔数组为数据帧编制索引。

谢谢,但我知道我需要这样做。如果不是因为南斯,我不明白为什么会发生这种事
print(len(df)) #99228
df = df[pd.notnull(df['Organization'])] #or df = df.dropna(subset=['Organization'])
print(len(df)) #99228
df = df[df['Organization'].str.contains(affiliation).fillna(False)]
print(len(df)) #1605