熊猫-如何选择其中包含特定值的行

时间:2019-06-25 19:35:17

标签: python pandas

我正在尝试选择所有包含“ --->”的行,但只得到其中的一些。我想查看整行是否在任何“单元格”中包含“ --->”。

import pandas as pd

df = pd.DataFrame({'A':['1--->3','4','6',''],'B':['2','4','--->8','4'],'C'['5','0','4','2--->']})
print df
print "------------------------------"

st = df[df[df.columns.any()].str.contains("--->", na=False)]

print st

print "------------------------------"

rm = df.loc[df[df.columns.all(0)].str.contains("--->", na=False)]
print rm

rev = df[~df[df.columns.all()].str.contains('^((?!--->).)*$', 
regex=True,na=False)]

print rev

        A      B      C
0  1--->3      2      5
1       4      4      0
2       6  --->8      4
3              4  2--->
------------------------------

st输出

        A  B  C
0  1--->3  2  5
------------------------------

rm输出

  A  B      C
3    4  2--->

rev输出     A B C     3 4 2 --->

我希望看到

        A      B      C
0  1--->3      2      5
2       6  --->8      4
3              4  2--->

3 个答案:

答案 0 :(得分:1)

您需要stack数据框,以便可以对堆叠的值使用str访问器。这为数据框的每个单元格值提供了布尔值。依次unstack.any(1)依次判断是否有任何元素为True。

df[df.stack().str.contains('--->').unstack().any(1)]

输出:

        A   B       C
0   1--->3  2       5
2   6       --->8   4
3           4       2--->

答案 1 :(得分:1)

这似乎可行

import pandas as pd

df = pd.DataFrame({'A': ['1--->3', '4', '6', ''], 'B': ['2', '4', '--->8', '4'], 'C': ['5', '0', '4', '2--->']})
print(df)
print('~~~~~~~~~~~~~~~~~~~~~~~')
filtered_df = df[(df['A'].str.contains('--->')) | (df['B'].str.contains('--->')) | (df['C'].str.contains('--->'))]
print(filtered_df)

输出

        A      B      C
0  1--->3      2      5
1       4      4      0
2       6  --->8      4
3              4  2--->
~~~~~~~~~~~~~~~~~~~~~~~
        A      B      C
0  1--->3      2      5
2       6  --->8      4
3              4  2--->

答案 2 :(得分:0)

另一种方法是简单地应用带有lambda的函数

def only_arrow(row):    
    for r in row:
        if "-->" in r:
            return True
    return False

并将其应用于df(这将为您提供true / false值作为序列):

result = df.apply(lambda x : only_arrow(x), axis=1)

0     True
1    False
2     True
3     True

删除“假”的索引

df.drop(result[result==False].index, inplace=True)

结果:

enter image description here