Python Pandas str.contains()在某些情况下不起作用
我有一个脚本,它在成对条件之间进行线性建模: 数据帧如下所示:Python Pandas str.contains()在某些情况下不起作用,python,pandas,Python,Pandas,我有一个脚本,它在成对条件之间进行线性建模: 数据帧如下所示: Accession Sequence variable value 0 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] DMSO 39.300171 1 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] DM
Accession Sequence variable value
0 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] DMSO 39.300171
1 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] DMSO 132.637125
2 O14548 [R].gLPDQMLYr.[T] DMSO 1165.245826
3 O14548 [R].gLPDQMLYr.[T] DMSO 642.971908
4 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] DMSO 83.906058
5 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] DMSO 160.718841
6 O14548 [R].gLPDQMLYr.[T] DMSO 1240.856710
7 O14548 [R].gLPDQMLYr.[T] DMSO 557.508092
8 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] DMSO 56.228425
9 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] DMSO 302.346775
10 O14548 [R].gLPDQMLYr.[T] DMSO 1176.998098
11 O14548 [R].gLPDQMLYr.[T] DMSO 766.993819
12 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] CCCP 0.387985
13 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] CCCP 0.175678
14 O14548 [R].gLPDQMLYr.[T] CCCP 885.174420
15 O14548 [R].gLPDQMLYr.[T] CCCP 130.458963
16 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] CCCP 0.557088
17 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] CCCP 0.095801
18 O14548 [R].gLPDQMLYr.[T] CCCP 612.171540
19 O14548 [R].gLPDQMLYr.[T] CCCP 46.449990
20 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] CCCP 6.016590
21 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] CCCP 0.466220
22 O14548 [R].gLPDQMLYr.[T] CCCP 586.392482
23 O14548 [R].gLPDQMLYr.[T] CCCP 303.857624
24 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] C+I 44.627773
25 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] C+I 0.841494
26 O14548 [R].gLPDQMLYr.[T] C+I 632.355914
27 O14548 [R].gLPDQMLYr.[T] C+I 162.333292
28 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] C+I 12.075158
29 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] C+I 154.253098
30 O14548 [R].gLPDQMLYr.[T] C+I 159.767999
31 O14548 [R].gLPDQMLYr.[T] C+I 1031.399087
32 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] C+I 150.724386
33 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] C+I 260.684163
34 O14548 [R].gLPDQMLYr.[T] C+I 141.459156
35 O14548 [R].gLPDQMLYr.[T] C+I 262.659208
现在我想为每一对拟合一个线性模型。我通过以下代码获得配对:
def tessa(source):
result = []
for p1 in range(len(source)):
for p2 in range(p1+1,len(source)):
result.append([source[p1],source[p2]])
return result
unique_conditions = list(set(conditions))
pairs = tessa(unique_conditions)
print(pairs)
我在对上循环,并通过数据帧过滤条件:
for pair in pairs:
pair.sort()
print(pair)
print(pair[0],pair[1])
temp=melted_Peptides[(melted_Peptides['variable'].str.contains(pair[0]))|(melted_Peptides['variable'].str.contains(pair[1]))]
print(temp)
问题来了。它无法正确过滤。此的输出:
['C+I', 'CCCP']
C+I CCCP
Accession Sequence variable value
12 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] CCCP 0.387985
13 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] CCCP 0.175678
14 O14548 [R].gLPDQMLYr.[T] CCCP 885.174420
15 O14548 [R].gLPDQMLYr.[T] CCCP 130.458963
16 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] CCCP 0.557088
17 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] CCCP 0.095801
18 O14548 [R].gLPDQMLYr.[T] CCCP 612.171540
19 O14548 [R].gLPDQMLYr.[T] CCCP 46.449990
20 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] CCCP 6.016590
21 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] CCCP 0.466220
22 O14548 [R].gLPDQMLYr.[T] CCCP 586.392482
23 O14548 [R].gLPDQMLYr.[T] CCCP 303.857624
而对于下一个比较,它看起来还行:
['CCCP', 'DMSO']
CCCP DMSO
Accession Sequence variable value
0 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] DMSO 39.300171
1 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] DMSO 132.637125
2 O14548 [R].gLPDQMLYr.[T] DMSO 1165.245826
3 O14548 [R].gLPDQMLYr.[T] DMSO 642.971908
4 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] DMSO 83.906058
5 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] DMSO 160.718841
6 O14548 [R].gLPDQMLYr.[T] DMSO 1240.856710
7 O14548 [R].gLPDQMLYr.[T] DMSO 557.508092
8 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] DMSO 56.228425
9 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] DMSO 302.346775
10 O14548 [R].gLPDQMLYr.[T] DMSO 1176.998098
11 O14548 [R].gLPDQMLYr.[T] DMSO 766.993819
12 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] CCCP 0.387985
13 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] CCCP 0.175678
14 O14548 [R].gLPDQMLYr.[T] CCCP 885.174420
15 O14548 [R].gLPDQMLYr.[T] CCCP 130.458963
16 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] CCCP 0.557088
17 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] CCCP 0.095801
18 O14548 [R].gLPDQMLYr.[T] CCCP 612.171540
19 O14548 [R].gLPDQMLYr.[T] CCCP 46.449990
20 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] CCCP 6.016590
21 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] CCCP 0.466220
22 O14548 [R].gLPDQMLYr.[T] CCCP 586.392482
23 O14548 [R].gLPDQMLYr.[T] CCCP 303.857624
第三种情况看起来又很奇怪:
['C+I', 'DMSO']
['C+I', 'DMSO']
C+I DMSO
Accession Sequence variable value
0 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] DMSO 39.300171
1 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] DMSO 132.637125
2 O14548 [R].gLPDQMLYr.[T] DMSO 1165.245826
3 O14548 [R].gLPDQMLYr.[T] DMSO 642.971908
4 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] DMSO 83.906058
5 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] DMSO 160.718841
6 O14548 [R].gLPDQMLYr.[T] DMSO 1240.856710
7 O14548 [R].gLPDQMLYr.[T] DMSO 557.508092
8 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] DMSO 56.228425
9 O14548 [K].lAGAWASEAYSPQGLkPVVSTEAPPIIFATPTk.[L] DMSO 302.346775
10 O14548 [R].gLPDQMLYr.[T] DMSO 1176.998098
11 O14548 [R].gLPDQMLYr.[T] DMSO 766.993819
我对大约5000个不同的数据帧使用相同的代码,并且始终有效。这些条件的名称完全相同,但在某些情况下,它会以某种方式中断
有人可以帮忙吗?您可以添加
regex=False
参数,以避免将值转换为regex:
在regexp中,“+”是一个特殊符号。您应该替换
'C+I'。替换('+',r'\+')
我可以这样做,但这并不能解释为什么它适用于约5000个具有完全相同名称的不同数据帧。非常感谢。这很有效。然而,我想知道为什么它有时有效,有时无效。我有另一个具有完全相同条件名称的数据帧,在那里它工作得很好。@BobbyKlann-我认为应该有一些值,比如
或+
或|
什么是特殊的正则表达式字符,所以它通过正则表达式匹配。
melted_Peptides['variable'].str.contains(pair[0], regex=False)