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