报错内容
完整报错示例
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
]