Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用特定条件筛选数据帧中的行_Python_Pandas - Fatal编程技术网

Python 使用特定条件筛选数据帧中的行

Python 使用特定条件筛选数据帧中的行,python,pandas,Python,Pandas,我有一个数据框,它是用制表符分隔的。我想在第三列的第一部分获得包含特定字符串的行。 请参见此示例: col1 col2 col3 a a1 good | bad b b1 bad | bad c c1 foogood | foobad d d1 bad | good e e1 good | good f

我有一个数据框,它是用制表符分隔的。我想在第三列的第一部分获得包含特定字符串的行。 请参见此示例:

col1       col2    col3    

a            a1    good | bad 

b            b1    bad | bad 

c            c1    foogood | foobad 

d            d1    bad | good  

e            e1    good | good  

f            f1    bad | foobad   
在这里,我想分隔
|
字符的第三列。然后,我想在第一部分中使用string
good
。所以期望的输出是

 col1           col2        col3    

    a            a1       good | bad 

    c            c1       foogood | foobad 

    e            e1        good | good  
我知道这可以使用
apply
函数来完成,但我不知道如何使用
apply
来定义这样的函数。我还尝试使用
[]
进行过滤,但无法使其正常工作。感谢兄弟姐妹们的帮助


更新:我还拥有底层TSV文件,并且知道这也可以使用
grep
awk
完成。所以这两种解决方案都可以。

您可以使用
str.split
contains

yourdf=df[df.col3.str.split('|').str[0].str.contains('good')]

您可以使用
str.split
contains

yourdf=df[df.col3.str.split('|').str[0].str.contains('good')]

这是非常容易与awk

$ cat file
col1    col2    col3
a       a1      good | bad
b       b1      bad | bad
c       c1      foogood | foobad
d       d1      bad | good
e       e1      good | good
f       f1      bad | foobad
$
$ awk -F $'\t' '(NR == 1 || $3 ~ /^[^|]*good/)' file
col1    col2    col3
a       a1      good | bad
c       c1      foogood | foobad
e       e1      good | good
此外,您还可以尝试一下
sed

sed -n '1p; /^[^\t]*\t[^\t]*\t[^|]*good/p' file

这也会产生所需的结果。

使用awk非常容易

$ cat file
col1    col2    col3
a       a1      good | bad
b       b1      bad | bad
c       c1      foogood | foobad
d       d1      bad | good
e       e1      good | good
f       f1      bad | foobad
$
$ awk -F $'\t' '(NR == 1 || $3 ~ /^[^|]*good/)' file
col1    col2    col3
a       a1      good | bad
c       c1      foogood | foobad
e       e1      good | good
此外,您还可以尝试一下
sed

sed -n '1p; /^[^\t]*\t[^\t]*\t[^|]*good/p' file

这也会产生所需的结果。

如果所需文本以
good
开头,后面总是跟着
|
,那么您可以直接在
.contains()
中将它们组合成一个子字符串(按此顺序)。熊猫可以过滤掉这些行

输入测向

df
  col1 col2              col3
0    a   a1        good | bad
1    b   b1         bad | bad
2    c   c1  foogood | foobad
3    d   d1        bad | good
4    e   e1       good | good
5    f   f1      bad | foobad
滤波测向

df[df['col3'].str.contains('good | \n')]
  col1 col2              col3
0    a   a1        good | bad
2    c   c1  foogood | foobad
4    e   e1       good | good
你也可以用
坏的
(而不是
好的


如果所需文本以
good
开头,后面总是跟着
|
,则可以直接在
.contains()
中将它们组合成一个子字符串(按此顺序)。熊猫可以过滤掉这些行

输入测向

df
  col1 col2              col3
0    a   a1        good | bad
1    b   b1         bad | bad
2    c   c1  foogood | foobad
3    d   d1        bad | good
4    e   e1       good | good
5    f   f1      bad | foobad
滤波测向

df[df['col3'].str.contains('good | \n')]
  col1 col2              col3
0    a   a1        good | bad
2    c   c1  foogood | foobad
4    e   e1       good | good
你也可以用
坏的
(而不是
好的


因为字符串中不需要任何正则表达式模式,所以可以设置
regex=False
+1因为字符串中不需要任何正则表达式模式,所以可以设置
regex=False
+1