查询字符串值的数据帧列

时间:2017-01-03 17:27:17

标签: python pandas dataframe

我需要获取列以值'MA', 'KP'开头的值。

我正在尝试将数据框查询链接起来:

df.loc[df['REFERRAL_GRP'].str.startswith("KP")==True | df['REFERRAL_GRP'].str.startswith("MA")==True]

这似乎不起作用,因为该列包含pd.nan对象(NULL值)。

本身,查询有效,如何将这两个查询合并在一起?

谢谢

这是我的错误消息:

Traceback (most recent call last): Debug Probe, prompt 40, line 1 File "c:\Python27\Lib\site-packages\pandas\core\generic.py", line 892, in __nonzero__ .format(self.__class__.__name__)) ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

2 个答案:

答案 0 :(得分:2)

尝试numpy logical_or

import numpy as np
df.loc[np.logical_or(df['REFERRAL_GRP'].str.startswith("KP")==True , df['REFERRAL_GRP'].str.startswith("MA")==True)]

答案 1 :(得分:1)

这是我们经常看到的一个问题。

df.loc[
    # 2. This returns a whole lot of `True`s or `False`s
    df['REFERRAL_GRP'].str.startswith("KP")==True
    # 1. `|` is expecting a `True` or `False`
    | 
    # 2. This returns a whole lot of `True`s or `False`s
    df['REFERRAL_GRP'].str.startswith("MA")==True
]

通过用括号括起条件来修复它

df.loc[
    # 1. Series of `True`s or `False`s
    (df['REFERRAL_GRP'].str.startswith("KP")==True)
    # 2. `|` is now a operator on `pd.Series` and is expecting `pd.Series`
    | 
    # 1. Series of `True`s or `False`s
    (df['REFERRAL_GRP'].str.startswith("MA")==True)
]

那就是说,我会这样做

df.loc[df.REFERRAL_GRP.str.match('^KP|MA')]