<p>我比以前的版本改进了</p>
<ol>
<li><p>将其包含在函数中</p></li>
<li><p>从另一个输入CSV文件中添加了一个不使用药物治疗的蛋白质的检查,该文件在a列中包含相同的蛋白质,在B列标记为“用药物治疗”中为真或假。</p></li>
<li><p>跳过空值。我注意到我的例子输入.csv有相等长度的列,如果它们的长度不相等,函数开始对NaN行执行一些操作。</p></li>
<li><p>初始字典键是从初始输入CSV的列中设置的,而不是硬编码它们。</p></li>
</ol>
<p>我用一些真实的数据测试了这一点(因此输入.csv到realinput.csv版),而且效果很好。在</p>
<p>完整功能的python文件的代码如下:</p>
<pre><code>import pandas
import os
os.chdir("path_to_directory_containing_realinput_and_boolean_file")
realinput = pandas.read_csv('realinput.csv')
rows_list = []
dict1 = dict.fromkeys(realinput.columns,"")
prot_drug_bool = pandas.read_csv('protein_drug_bool.csv')
prot_drug_bool.index = prot_drug_bool.protein
prot_drug_bool = prot_drug_bool.drop("protein",axis=1)
def null_check(value):
return pandas.isnull(value)
def combinator(input_table):
for unique_protein in input_table.protein.unique():
dict1 = dict.fromkeys(realinput.columns,"")
dict1['protein']=unique_protein
rows_list.append(dict1)
if prot_drug_bool.ix[unique_protein]:
for unique_drug in input_table.drug.unique():
if not null_check(unique_drug):
for unique_drug_conc in input_table.drug_concentration.unique():
if not null_check(unique_drug_conc):
dict1 = dict.fromkeys(realinput.columns,"")
dict1['protein']=unique_protein
dict1['drug']=unique_drug
dict1['drug_concentration']=unique_drug_conc
rows_list.append(dict1)
df = pandas.DataFrame(rows_list)
return df
df2 = combinator(realinput)
df2.to_csv('realoutput.csv')
</code></pre>
<p>我仍然希望通过摆脱硬编码任何字典键和让用户定义输入.csv列标题指示输出。另外,我想离开定义的三列设置来处理任意数量的列。在</p>