我很难在我的.py脚本上运行一个测试,它基本上只是创建一个映射文件(获取3个数据集并将它们合并)。每次我在终端上运行测试时,它都会失败,我不知道我做错了什么,因为当我在jupyter笔记本上运行它时,它是有效的。
以下是我所拥有的(不起作用):
import unittest
from pandas.util.testing import assert_frame_equal
from create_mapping_file import *
def main():
PATH_ARCHIVED_ENSEMBLS = 'test-data/original_files/archived_emsembls.txt'
PATH_ARCHIVED_ACCESSIONS = 'test-data/original_files/archived_accessions.txt'
PATH_UNIPROT_MAPPING = 'test-data/original_files/uniprot_name_mapping.dat'
actual = create_mapping_df(PATH1, PATH2, PATH3)
actual = actual.replace("", np.nan, regex = True)
# actual.to_csv('expected.csv', index = False)
# when I include the above line, the test runs fine, but when I run it the second
# time around, it stops working
expected=pd.read_csv("expected.csv")
assert_frame_equal(expected.reset_index(drop = True), actual.reset_index(drop = True))
if __name__ == '__main__':
main()这是我正在犯的错误。我感到困惑有两个主要原因:大多数did看起来完全相同--它声称它们是不同的)--有些did是不一样的,我不知道它们为什么不完全相同,因为我所做的只是导出“实际”并命名为“预期的”:
DataFrame.iloc[:, 3] (column name="Protein ID") values are different (31.16418 %)
[index]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...]
[left]: [ENSP00000361930, ENSP00000300161, ENSP00000264335, ENSP00000461762, ENSP00000248975, ENSP00000306330, ENSP00000340989, ENSP00000371267, ENSP00000238081, ENSP00000379287, ENSP00000379288, ENSP00000430072, ENSP00000309503, ENSP00000395114, ENSP00000398599, ENSP00000379281, ENSP00000379283, ENSP00000379286, ENSP00000263776, ENSP00000391775, ENSP00000368109, ENSP00000261461, ENSP00000442866, ENSP00000164133, ENSP00000417963, ENSP00000420674, ENSP00000377669, ENSP00000337641, ENSP00000452396, ENSP00000404632, ENSP00000412324, ENSP00000329009, ENSP00000408389, ENSP00000262239, ENSP00000333905, ENSP00000324804, ENSP00000311344, ENSP00000376775, ENSP00000410671, ENSP00000459838, ENSP00000461254, ENSP00000459827, ENSP00000459644, ENSP00000459456, ENSP00000343317, ENSP00000437193, ENSP00000325074, ENSP00000370113, ENSP00000377936, ENSP00000421396, ENSP00000398779, ENSP00000336591, ENSP00000377933, ENSP00000349283, ENSP00000377932, ENSP00000431320, ENSP00000377931, ENSP00000377935, ENSP00000399970, ENSP00000469896, ENSP00000335083, ENSP00000372042, ENSP00000422374, ENSP00000423649, ENSP00000425247, ENSP00000358421, ENSP00000432268, ENSP00000445122, ENSP00000358424, ENSP00000297679, ENSP00000262520, ENSP00000370662, ENSP00000350018, ENSP00000411979, ENSP00000337213, ENSP00000422168, ENSP00000403231, ENSP00000388152, ENSP00000348685, ENSP00000424846, ENSP00000409746, ENSP00000422605, ENSP00000374488, ENSP00000424072, ENSP00000355428, ENSP00000412203, ENSP00000373301, ENSP00000388553, ENSP00000386231, ENSP00000253688, ENSP00000294973, ENSP00000265395, ENSP00000219431, ENSP00000380918, ENSP00000348809, ENSP00000340691, ENSP00000362314, ENSP00000308472, ENSP00000380659, ENSP00000328103, ...]
[right]: [ENSP00000361930, ENSP00000300161, ENSP00000264335, ENSP00000461762, ENSP00000248975, ENSP00000306330, ENSP00000340989, ENSP00000371267, ENSP00000238081, ENSP00000379287, ENSP00000395114, ENSP00000430072, ENSP00000379286, ENSP00000379281, ENSP00000309503, ENSP00000379283, ENSP00000379288, ENSP00000398599, ENSP00000263776, ENSP00000391775, ENSP00000368109, ENSP00000261461, ENSP00000442866, ENSP00000164133, ENSP00000417963, ENSP00000420674, ENSP00000377669, ENSP00000337641, ENSP00000452396, ENSP00000404632, ENSP00000412324, ENSP00000262239, ENSP00000333905, ENSP00000329009, ENSP00000408389, ENSP00000324804, ENSP00000311344, ENSP00000459456, ENSP00000459838, ENSP00000459827, ENSP00000437193, ENSP00000376775, ENSP00000459644, ENSP00000343317, ENSP00000461254, ENSP00000410671, ENSP00000325074, ENSP00000370113, ENSP00000377936, ENSP00000349283, ENSP00000377933, ENSP00000377932, ENSP00000421396, ENSP00000377931, ENSP00000377935, ENSP00000336591, ENSP00000431320, ENSP00000398779, ENSP00000399970, ENSP00000469896, ENSP00000335083, ENSP00000425247, ENSP00000372042, ENSP00000422374, ENSP00000423649, ENSP00000358421, ENSP00000432268, ENSP00000445122, ENSP00000358424, ENSP00000297679, ENSP00000370662, ENSP00000262520, ENSP00000350018, ENSP00000411979, ENSP00000337213, ENSP00000422168, ENSP00000374488, ENSP00000422605, ENSP00000348685, ENSP00000388152, ENSP00000409746, ENSP00000424072, ENSP00000424846, ENSP00000403231, ENSP00000355428, ENSP00000412203, ENSP00000373301, ENSP00000388553, ENSP00000386231, ENSP00000253688, ENSP00000294973, ENSP00000265395, ENSP00000219431, ENSP00000380918, ENSP00000348809, ENSP00000340691, ENSP00000362314, ENSP00000308472, ENSP00000380659, ENSP00000328103, ...]发布于 2022-09-05 16:48:20
建议的解决方案首先是在测试中添加一个排序步骤。就像我在9月3日的评论中指出的那样,他们看起来不一样。
考虑到这一点,您可能还可以依赖Python的集合数学/比较功能来检查测试中包含的项是否相同。考虑:
a = ["a","b","c"]
b = ["b","a","c"]
set(a) == set(b)这将导致返回True。
当然,如果列表中重复项的数量很重要,那么使用类型转换到set进行检查是行不通的,因为它只需要对重复或多次发生的每一项进行一次代表。将一个列表设置为一个集合,然后返回到一个列表(如果这确实是需要的类型)是Python中一个非常常见的成语,用来将一个列表简化为唯一的元素。
https://stackoverflow.com/questions/73576797
复制相似问题