【发布时间】:2017-01-13 01:09:31
【问题描述】:
我正在尝试使用其他参考文件在 .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
我用来制作字典的参考 .csv 如下所示:
PROBE, Title, Gene
1390154, Cellular, Becn1
1371844, Liver, Vcp
1393851, Kidney, Lypla2
1386013, Heart, Ube2d2
理想情况下我可以做到这一点:
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
P.S.:如果我也想映射列,请使用另一个参考 .csv,如下所示:
Experiment, Array, Drug
8983, Genechip, Famotidine
8878, Microarray, Dicyclomine
8988, Genechip, Etidronate
8981, Microarray, flunarizine
我可以简单地将上述代码中的“行”替换为“列”吗?当我尝试这样做时,它只是吐回没有映射新值的原始文件....
感谢大家的帮助!
【问题讨论】:
-
我在您的代码中看不到任何东西可以神奇地将那些“空”键放入您的字典中,所以我的猜测是您的 csv 文件中可能有一些空行对此负责。我建议您
printrow[0] 和 row[2] 为每一行找到空值的位置。
标签: python-2.7 csv dictionary