所以我試着運行一個我之前開發的代碼,它使用熊貓很好地運行了很多次。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
>>>
什麼是my_column?這是僞代碼,還是你正在運行的確切代碼? my_column在哪裏定義? – Parker 2014-10-22 04:45:52
所以我基本上導入一個文件列表,並從文件中提取文件名。在這種情況下,我用一個我知道在列表中的文件來測試它。 例如,'beta_maxi070214_08'是一個字符串和一個文件名,並且是列表all_filenames(也在列中)的一個組件。 – 2014-10-22 04:47:15
你沒有回答,什麼是my_column?它在哪裏定義? – Parker 2014-10-22 04:48:48