Wie man markierte Werte von Spalten in ein Pandas Dataframe passt (einige Spaltenwerte fehlen)?

Die folgenden sind zwei Zeilen aus meinem unbeschrifteten Dataset, eine kleine Teilmenge:

random1 147 sub1 95 34 dewdfa3 15000 -1238 SBAASBAQSBARSBATSBAUSBAXBELAAX AAA:COL:UVTWUVWDUWDUWDWW BBB:COL:F CCC:COL:GTATGTCA DDD:COL:K20 EEE:COL:54T GGG:COL:-30.5 HHH:COL:000.1 III:COL:2 JJJ:COL:0 random2 123 sub1 996 12 kwnc239 10027 144 LBPRLBPSLBRDLBSDLBSLLBWB AAA:COL:UWTTUTUVVUWWUUU BBB:COL:F DDD:COL:CACGTCGG EEE:COL:K19 FFF:COL:HCC16 GGG:COL:873 III:COL:-77 JJJ:COL:0 KKK:COL:0 LLL:COL:1 MMM:COL:212 

Die ersten neun Spalten sind im gesamten Datensatz konsistent und können beschriftet werden.

Mein Problem ist mit den folgenden Spalten. Jeder Wert in dieser Zeile wird dann zuerst mit dem Spaltenwert markiert, zB AAA:COL:UVTWUVWDUWDUWDWW ist Spalte AAA , BBB:COL:F ist Spalte BBB , etc.

Jedoch (1) jede Zeile hat nicht die gleiche Anzahl von Spalten und (2) einige Spalten sind "fehlen". Die erste Zeile fehlt die Spalte FFF , die zweite Zeile überspringt die Spalte CCC und HHH .

JJJ auch, dass die erste Zeile in Spalte JJJ , während die zweite Spalte bei Spalte MMM anhält.

Wie würde man 9 + 13 Spalten eines Dataframs zuordnen und diese Werte so analysieren, dass, wenn ein column:value Wertpaar nicht existiert, diese Spalte einen NaN Wert haben würde.

Möchte etwas wie pandas.read_table() die Funktionalität dafür haben?

Dies ist das "richtige" Format für die erste Zeile:

 random int sub int2 int3 string1 int4 int5 string2 AAA BBB CCC DDD EEE FFF GGG .... MMM random1 147 sub1 95 34 dewdfa3 15000 -1238 SBAASBAQSBARSBATSBAUSBAXBELAAX UVTWUVWDUWDUWDWW F DFADFADFA K20 54T 'NaN' -30.5 ....'NaN' 

Verwandte (und unbeantwortete) Frage hier: Wie importiere ich unmarkierte und fehlende Spalten in ein Pandas-Dataframe?

  • Wie kann ich Extra-Leerzeichen aus Strings entfernen, wenn ich eine CSV-Datei in Pandas analysiere?
  • Entfernen von unerwünschten Zeichen aus einer Zeichenfolge in Python
  • Wie druckt man die Anzahl der Anlässe einiger Strings in derselben CSV-Datei mit Python?
  • Parsing Source Code (Python) Ansatz: Schöne Suppe, lxml, html5lib Unterschied?
  • Python re.split lookahead muster
  • Wie konvertiere man kommagetrennte Zeichenfolge in Python?
  • Verwenden von isdigit für floats?
  • Python-String-Parsing von .txt
  • One Solution collect form web for “Wie man markierte Werte von Spalten in ein Pandas Dataframe passt (einige Spaltenwerte fehlen)?”

    Das wird es tun:

     text = """random1 147 sub1 95 34 dewdfa3 15000 -1238 SBAASBAQSBARSBATSBAUSBAXBELAAX AAA:COL:UVTWUVWDUWDUWDWW BBB:COL:F CCC:COL:GTATGTCA DDD:COL:K20 EEE:COL:54T GGG:COL:-30.5 HHH:COL:000.1 III:COL:2 JJJ:COL:0 random2 123 sub1 996 12 kwnc239 10027 144 LBPRLBPSLBRDLBSDLBSLLBWB AAA:COL:UWTTUTUVVUWWUUU BBB:COL:F DDD:COL:CACGTCGG EEE:COL:K19 FFF:COL:HCC16 GGG:COL:873 III:COL:-77 JJJ:COL:0 KKK:COL:0 LLL:COL:1 MMM:COL:212""" data = [line.split() for line in text.split('\n')] data1 = [line[:9] for line in data] data2 = [line[9:] for line in data] # list of dictionaries from data2, where I parse the columns dict2 = [[dict([d.split(':COL:') for d in d1]) for d1 in data2] result = pd.concat([pd.DataFrame(data1), pd.DataFrame(dict2)], axis=1) result.iloc[:, 9:] 

    Bildbeschreibung hier eingeben

    Python ist die beste Programmiersprache der Welt.