Python 2.7 字典生成空的键/值

Python 2.7 字典生成空的键/值,python-2.7,csv,dictionary,Python 2.7,Csv,Dictionary,我正在尝试使用其他引用文件映射.csv文件上的行值。原始的.csv如下所示: PROBE,8988,8981,8878,8983 1371844,0.011,-0.018,-0.032,-0.034 1386013,0.034,0.225,-0.402,0.418 1390154,0.145,-0.108,-0.421,-0.048 1393851,-0.146,-0.026,-0.101,-0.011 PROBE, Title, Gene 1390154, Cellular, Becn1 1

我正在尝试使用其他引用文件映射.csv文件上的行值。原始的.csv如下所示:

PROBE,8988,8981,8878,8983
1371844,0.011,-0.018,-0.032,-0.034
1386013,0.034,0.225,-0.402,0.418
1390154,0.145,-0.108,-0.421,-0.048
1393851,-0.146,-0.026,-0.101,-0.011
PROBE, Title, Gene
1390154, Cellular, Becn1
1371844, Liver, Vcp
1393851, Kidney, Lypla2
1386013, Heart, Ube2d2
Experiment, Array, Drug
8983, Genechip, Famotidine
8878, Microarray, Dicyclomine
8988, Genechip, Etidronate
8981, Microarray, flunarizine
我用来制作字典的reference.csv如下所示:

PROBE,8988,8981,8878,8983
1371844,0.011,-0.018,-0.032,-0.034
1386013,0.034,0.225,-0.402,0.418
1390154,0.145,-0.108,-0.421,-0.048
1393851,-0.146,-0.026,-0.101,-0.011
PROBE, Title, Gene
1390154, Cellular, Becn1
1371844, Liver, Vcp
1393851, Kidney, Lypla2
1386013, Heart, Ube2d2
Experiment, Array, Drug
8983, Genechip, Famotidine
8878, Microarray, Dicyclomine
8988, Genechip, Etidronate
8981, Microarray, flunarizine
理想情况下,我可以做到这一点:

PROBE   8988   8981   8878   8983
Vcp  0.011 -0.018 -0.032 -0.034
Ube2d2  0.034  0.225 -0.402  0.418
Becn1  0.145 -0.108 -0.421 -0.048
Lypla2 -0.146 -0.026 -0.101 -0.01
这就是我所尝试的:

import csv
import pandas as pd

reader = csv.reader(open('C:\Users\Troy\Documents\ExPSID.csv')) #Open reference .csv file     
result = {}
for row in reader:
    key = row[0]
    result[key] = row[2]
    dict = result #Configure dictionary

df = pd.read_csv('C:\Users\Troy\Documents\ExPS2.txt', index_col=0) #Fetch unmapped .csv
df.replace({"PROBE": dict}) #Use dictionary to map Id's to genes
它抛出一个“ValueError:不允许用重叠的键和值替换”。

但是,我知道这是为什么,因为如果我打印dict,我会得到:

{'': '', ' ': '', '1390154': 'Becn1', '1386013': 'Ube2d2', 'Probe  ': 'Gene', '1371844': 'Vcp', '1393851': 'Lypla2'}
它在我的字典前面加了两个空键:值集。如果我手动删除它们,df.replace({“PROBE”:dict})工作正常,一切正常

所以我的问题是,有没有一种方法可以修改这个脚本,这样我就不必手动删除前置键:值集?总的来说,有没有更好的方法可以做到这一点?

我显然是Python新手,所以如果这是一个愚蠢的问题,我很乐意承认:p


注:如果我还想映射列,请使用另一个reference.csv,如下所示:

PROBE,8988,8981,8878,8983
1371844,0.011,-0.018,-0.032,-0.034
1386013,0.034,0.225,-0.402,0.418
1390154,0.145,-0.108,-0.421,-0.048
1393851,-0.146,-0.026,-0.101,-0.011
PROBE, Title, Gene
1390154, Cellular, Becn1
1371844, Liver, Vcp
1393851, Kidney, Lypla2
1386013, Heart, Ube2d2
Experiment, Array, Drug
8983, Genechip, Famotidine
8878, Microarray, Dicyclomine
8988, Genechip, Etidronate
8981, Microarray, flunarizine
我可以简单地将上述代码中的“行”替换为“列”吗?当我尝试这样做时,它只是吐回原始文件,没有映射新值


我感谢大家的帮助

我在你的代码中看不到任何东西可以神奇地将那些“空”键放在你的字典里,所以我猜你的csv文件中可能有一些空行是造成这种情况的原因。我建议您为每行打印
第[0]行和第[2]行,以找到空值的位置。我在您的代码中看不到任何东西可以神奇地将这些“空”键放入您的字典中,因此我猜您的csv文件中可能有几行空行负责此操作。我建议您为每行打印第[0]行和第[2]行,以找到空值的位置。这非常适合映射索引。我没有想过使用
merge
。这非常适合映射索引。我没有想过要使用
merge
  import pandas as pd
  If i understood you correctly you want to achieve something like this from the two sets you have:

         8988   8981   8878   8983
PROBE                             
Vcp     0.011 -0.018 -0.032 -0.034
Ube2d2  0.034  0.225 -0.402  0.418
Becn1   0.145 -0.108 -0.421 -0.048
Lypla2 -0.146 -0.026 -0.101 -0.011

pandas merge() function can help you achieve what you want: 

df1 = pd.read_csv('{path_to_original}/org.csv')
df2 = pd.read_csv('{path_to_reference}/reference.csv', delimiter=', ', engine='python')
df3 = df1.merge(df2)
df4 = df3.set_index('Gene').drop(['PROBE', 'Title'], axis=1)
df4.index.name = 'PROBE'
print(df4)

If you take a look at your reference file that has space after delimiter comma i.e why it is mentioned as delimiter ', ' while reading the csv.