我对熊猫和Python还很陌生,我有生物化学和药物发现的背景。我想自动化的一个常见任务是将药物治疗和蛋白质的组合列表转换为包含所有这些组合的格式。在
例如,如果我有一个包含给定组合集的数据帧: https://github.com/colinhiggins/dillydally/blob/master/input.csv,我想把它变成{a2},这样每个蛋白质(1、2和3)被复制n次到一个输出数据框中,其中的行数n是药物数量和药物浓度加上每个蛋白质的一个非药物行。在
理想情况下,结合的程度将由其他一些表来决定,这些表表明了关系,例如,如果蛋白质1和2要用药物1、2和3治疗,而蛋白质2没有用任何药物治疗。在
我在想某种嵌套的for loop
是必需的,但是我不能完全理解如何启动它。在
我比以前的版本改进了
将其包含在函数中
从另一个输入CSV文件中添加了一个不使用药物治疗的蛋白质的检查,该文件在a列中包含相同的蛋白质,在B列标记为“用药物治疗”中为真或假。
跳过空值。我注意到我的例子输入.csv有相等长度的列,如果它们的长度不相等,函数开始对NaN行执行一些操作。
初始字典键是从初始输入CSV的列中设置的,而不是硬编码它们。
我用一些真实的数据测试了这一点(因此输入.csv到realinput.csv版),而且效果很好。在
完整功能的python文件的代码如下:
我仍然希望通过摆脱硬编码任何字典键和让用户定义输入.csv列标题指示输出。另外,我想离开定义的三列设置来处理任意数量的列。在
我在add one row in a pandas.DataFrame的帮助下,使用ShikharDua推荐的方法创建dict列表,每个dict对应于最终数据帧中的一行。在
代码是:
它不像我希望的那样灵活,因为不含药物的蛋白质的额外行是硬编码到嵌套的
for
循环中,但至少这是一个开始。我想我可以在每个for
循环中添加一些if
语句。在考虑以下解决方案
这基本上是一个笛卡尔积,它是
itertools
模块中product
函数的功能。我很困惑你为什么要在其他列中列出蛋白质和nan的空行。不知道这是故意的还是偶然的。如果数据类型是统一的和数值的,这与meshgrid的功能类似。在相关问题 更多 >
编程相关推荐