gpt4 book ai didi

python - Pandas 出现故障?无法覆盖值

转载 作者:太空宇宙 更新时间:2023-11-04 01:13:01 24 4
gpt4 key购买 nike

所以我尝试运行我之前开发的代码,它已经使用 pandas 运行了很多次。

我的数据框有一个自定义索引(以唯一字符串值作为索引,代表唯一标识符,在本例中为单个蛋白质),文件名作为列。然后我使用迭代过程将计数分配给数据框中的某些单元格。所以,假设我有一个默认字典 (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
>>>

最佳答案

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

这样做的原因(根据我的理解)是 df['x']['y'] 返回数据框的副本。因此,您正在更改一个值,但您正在更改一个副本的值,该副本不会放回其中。

编辑:DSM 说明,.loc.iloc 通常优于 .ix,后者具有难以解释的语义。这里有一部分文档专门用于解释涉及的 View 与复制问题 http://pandas.pydata.org/pandas-docs/stable/indexing.html#returning-a-view-versus-a-copy

关于python - Pandas 出现故障?无法覆盖值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26500435/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com