Pandas的小毛病?无法覆盖valu

2024-10-05 14:28:00 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我试着运行一个我以前开发的代码,它已经用pandas很好地运行了很多次。在

我的dataframe有一个自定义索引(使用唯一的字符串值作为索引,表示一个唯一的标识符,在本例中是单个蛋白质),文件名作为列。然后我使用一个迭代过程将计数分配给数据帧中的一些单元格。所以,假设我有一个默认字典(my_dict),它有一个给定的缩写键,值是[filename,protein,count]。在

我有一个文件名的分类列表,和一个蛋白质的分类列表,分别称为allfilenames和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不返回正确的文件名。在

为了测试,我在数据帧上做了以下操作:

^{pr2}$

我尝试过df[my_filename].ix[my_protein]、df[my_filename].loc[my_protein],甚至创建了一个自定义索引。在

通常这个脚本运行得很好。我的文件名通常类似于: beta_maxi070214_08,因此没有空格或没有ASCII字符。在

我的蛋白质名称都是标准的,所有的名字要么在UniProtKB数据库中,要么是两种蛋白质之间的联系(即ACACA-acacab)。在

我不太清楚发生了什么事。有人有什么建议吗?在

编辑: 下面是一个例子:

>>> 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
>>> 

Tags: 数据keypandasdf列表文件名mycount
1条回答
网友
1楼 · 发布于 2024-10-05 14:28:00

尝试: df.ix[my_filename,my_protein] = value

这样做的原因(据我的理解)是df['x']['y']返回一个数据帧的副本。所以你改变了一个值,但是你改变了一个拷贝的值,而不是放回原处。在

编辑:DSM注释,.loc.iloc通常比.ix更受欢迎,这很难解释语义。这里有一部分文档致力于解释视图与副本相关的问题http://pandas.pydata.org/pandas-docs/stable/indexing.html#returning-a-view-versus-a-copy

相关问题 更多 >