Ich versuche, Zeilenwerte in einer CSV-Datei mit anderen Referenzdateien abzubilden. Die ursprüngliche CSV sieht wie folgt aus:Wörterbuch erzeugt leere Schlüssel/Werte
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
Der Referenz .csv, die ich verwendet, um das Wörterbuch das sieht aus wie zu machen:
PROBE, Title, Gene
1390154, Cellular, Becn1
1371844, Liver, Vcp
1393851, Kidney, Lypla2
1386013, Heart, Ube2d2
Idealerweise kann ich das erreichen:
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
Das habe ich versucht:
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
Es wirft eine "ValueError: Ersetzung nicht mit überlappenden Schlüsseln und Werten erlaubt".
Ich weiß jedoch, warum dies so ist, weil, wenn ich dict drucken, erhalte ich:
{'': '', ' ': '', '1390154': 'Becn1', '1386013': 'Ube2d2', 'Probe ': 'Gene', '1371844': 'Vcp', '1393851': 'Lypla2'}
Es prepends mein Wörterbuch mit zwei leeren Schlüssel: Wert-Sets. Wenn ich diese manuell lösche, funktioniert df.replace ({"PROBE": dict}) korrekt und alles ist gut.
Also meine Frage ist, gibt es eine Möglichkeit, dass ich dieses Skript ändern kann, so dass ich nicht manuell den vorangestellten Schlüssel löschen muss: Wert setzt? Gibt es einen besseren Weg, dies insgesamt zu tun?
Ich bin auf Python eindeutig neu, so dass, wenn dies eine dumme Frage werde ich es gerne besitzen: P
PS: Wenn ich wollte auch die Spalten auf der Karte, eine weitere Referenz .csv mit wie folgt:
Experiment, Array, Drug
8983, Genechip, Famotidine
8878, Microarray, Dicyclomine
8988, Genechip, Etidronate
8981, Microarray, flunarizine
Kann ich einfach die "Zeile" im oben genannten Code zu "Col" ersetzen? Wenn ich das probierte, spuckte es gerade die ursprüngliche Akte ohne die neuen gemappten Werte zurück.
Ich schätze die Hilfe jedermann!
Ich sehe nichts in Ihrem Code, die magicaly diese „leer“ Schlüssel in der Dictionnary setzen könnte, so meine Vermutung ist, dass Sie ein paar leeren Zeilen in Ihrer CSV-Datei, die dafür verantwortlich sind, haben können. Ich würde vorschlagen, Sie 'print' Zeile [0] und Zeile [2] für jede Zeile zu finden, wo die leeren Werte sind. – jadsq