报错内容
完整报错示例
| 1 | --------------------------------------------------------------------------- | 
问题分析
是complex_id的长度小于tmpdf.index的长度。
源码根据interacting_pair字段将相互作用划分到complex_id或simple_id中,标准是这个字段里下划线的数量。
然后问题出在分隔出来的地方 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21_interactions_subset = interactions_subset.loc[complex_id].copy()
_interactions_subset_simp = interactions_subset.loc[simple_id].copy()
# 问题
complex_idx1 = [i for i, j in _interactions_subset.partner_b.items() if re.search("complex:", j)]
complex_idx2 = [i for i, j in _interactions_subset.partner_a.items() if re.search("complex:", j)]
# 问题
# complex_idx
simple_1 = list(_interactions_subset.loc[complex_idx1, "interacting_pair"])
simple_2 = list(_interactions_subset.loc[complex_idx2, "interacting_pair"])
partner_1 = [re.sub("complex:", "", b) for b in _interactions_subset.loc[complex_idx1, "partner_b"]]
partner_2 = [re.sub("complex:", "", a) for a in _interactions_subset.loc[complex_idx2, "partner_a"]]
for i, _ in enumerate(simple_1):
    simple_1[i] = re.sub(partner_1[i] + "_|_" + partner_1[i], "", simple_1[i])
for i, _ in enumerate(simple_2):
    simple_2[i] = re.sub(partner_2[i] + "_|_" + partner_2[i], "", simple_2[i])
tmpdf = pd.concat([pd.DataFrame(zip(simple_1, partner_1)), pd.DataFrame(zip(partner_2, simple_2))])
tmpdf.index = complex_id
在这个CellphoneDB结果里,partner_a和partner_b有同时包含complex:的情况,此时会有相同的行被划分到complex_idx1和complex_idx2中,从而导致tmpdf中有重复的部分,行数大于complex_id的长度。
解决方案
在作者修好之前,可以暂时先在取complex_idx2的时候,不选complex_idx1中存在的行。
1
2
3
4complex_idx2 = [
    i for i, j in _interactions_subset.partner_a.items()
    if re.search("complex:", j) and i not in complex_idx1
]
03-19跟进
我已经提交PR修复了包括此BUG在内的2个问题w