选择列不为空且等于(字符串)值的行

时间:2018-06-27 09:23:53

标签: python pandas dataframe selection loc

所以基本上我想选择Col A等于字符串'hey'的所有行。 我的问题是Col A可以包含null / nan,因此我得到

TypeError: invalid type comparison. 

执行时:

df.loc[df['A'] == 'hey']

然后我提出了另一个条件:

df.loc[df['A'].notnull() & (df['A'] == 'hey')] 

我在这里遇到同样的错误。

我做了一个黑客,将Col A中的所有空值都更改为'',但这还不是很美,首先选择Col A不为空的所有行,然后从那里选择所有行等于“嘿”?

3 个答案:

答案 0 :(得分:0)

怎么样?

df['A'] = df['A'].astype(str)
newDf = df[df.A == 'hey']

这应该为您提供一个新的数据框,其中所有行都包含A列中的“嘿”?

答案 1 :(得分:0)

我猜应该有一些数字,因此请尝试将值转换为string或比较numpy数组:

newDf = df[df.A.astype(str) == 'hey']

或者:

newDf = df[df.A.values == 'hey']

答案 2 :(得分:0)

对于null / NaN值,您的逻辑很好。下面是一个例子。您应该提供一个最小且可验证的示例,指明Python / Pandas的版本号。

df = pd.DataFrame({'col': [np.nan, None, 'hey', 45.4352, 'somestring']})

print(df.loc[df['col'] == 'hey'])

   col
2  hey