所以我尝试运行一个我之前开发的代码,它已经使用 pandas 很好地运行了很多次。
我的数据框有一个自定义索引(以唯一的字符串值作为索引,代表一个唯一的标识符,在这种情况下是单个蛋白质)和文件名作为列。然后,我使用迭代过程将计数分配给数据框中的某些单元格。因此,假设我有一个带有给定 abritrary 键的默认字典 (my_dict),其值为 [filename, protein, count]。
我有一个排序的文件名列表和一个排序的蛋白质列表,分别称为 all_filenames 和 all_proteins。
import pandas as pd
df = pd.DataFrame(index=all_proteins, columns=all_filenames)
from collections import defaultdict
my_dict = defaultdict(list)
... (Assign values to the dictionary)
for key in my_dict:
my_filename = my_dict[key][0]
my_protein = my_dict[key][1]
my_count = my_dict[key][2]
df[my_filename][my_protein] = my_count
但是,每当我打印 df 时,由于某种原因,在这种情况下它会返回完全空白(具有正确的索引和文件名),而通常不会。
所以为了测试,我对数据框做了以下操作:
>>> my_filename in df.columns.tolist()
True
>>> my_protein in df.index.tolist()
True
>>> df[my_filename][my_protein]
nan
>>> my_count
3.0
>>> type(my_count)
<type 'numpy.float64'>
>>>
>>> df[my_filename][my_protein] = my_count
>>> df[my_filename][my_protein]
nan
>>>
我尝试了 df[my_filename].ix[my_protein]、df[my_filename].loc[my_protein],甚至创建了自定义索引。
通常这个脚本工作正常。我的文件名通常类似于:beta_maxi070214_08,所以没有空格或 ASCII 字符。
我的蛋白质名称都是标准的,所有名称要么在 UniProtKB 数据库中,要么是两种蛋白质之间的联系(即 ACACA-ACACB)。
我不确定发生了什么。有没有人有什么建议?
编辑:这是一个例子:
>>> my_filename
'beta_orbi080714_05'
>>> my_protein
'ACACA:K1316-ACACA:K1363'
>>> my_count
3.0
>>> type(my_count)
<type 'numpy.float64'>
>>> df[my_filename][my_protein] = my_count
>>> df[my_filename][my_protein]
nan
>>>