Lesen von Schlüsselwertpaaren in Pandas

Pandas macht es wirklich einfach, eine CSV-Datei zu lesen:

pd.read_table('data.txt', sep=',') 

Hat Pandas etwas Ähnliches für eine Datei mit Schlüsselwertpaaren? Ich bin damit fertig:

 pd.DataFrame([dict([p.split('=') for p in l.split(',')]) for l in open('data.txt')]) 

Wenn nicht eingebaut, dann vielleicht etwas idiomatischer?

Die interessante Akte sieht so aus:

 symbol=ESM3,exchange=GLOBEX,timestamp=1365428525690751,price=1548.00,quantity=551 symbol=ESM3,exchange=GLOBEX,timestamp=1365428525697183,price=1548.00,quantity=551 symbol=ESM3,exchange=GLOBEX,timestamp=1365428525714498,price=1548.00,quantity=551 symbol=ESM3,exchange=GLOBEX,timestamp=1365428525734967,price=1548.00,quantity=551 symbol=ESM3,exchange=GLOBEX,timestamp=1365428525735567,price=1548.00,quantity=555 symbol=ESM3,exchange=GLOBEX,timestamp=1365428525735585,price=1548.00,quantity=556 symbol=ESM3,exchange=GLOBEX,timestamp=1365428525736116,price=1548.00,quantity=556 symbol=ESM3,exchange=GLOBEX,timestamp=1365428525740757,price=1548.00,quantity=556 symbol=ESM3,exchange=GLOBEX,timestamp=1365428525748502,price=1548.00,quantity=556 symbol=ESM3,exchange=GLOBEX,timestamp=1365428525748952,price=1548.00,quantity=557 

Es hat genau die gleichen Schlüssel auf jeder Zeile und in der gleichen Reihenfolge. Es gibt keine Nullwerte. Die zu generierende Tabelle lautet:

  exchange price quantity symbol timestamp 0 GLOBEX 1548.00 551\n ESM3 1365428525690751 1 GLOBEX 1548.00 551\n ESM3 1365428525697183 2 GLOBEX 1548.00 551\n ESM3 1365428525714498 3 GLOBEX 1548.00 551\n ESM3 1365428525734967 4 GLOBEX 1548.00 555\n ESM3 1365428525735567 5 GLOBEX 1548.00 556\n ESM3 1365428525735585 6 GLOBEX 1548.00 556\n ESM3 1365428525736116 7 GLOBEX 1548.00 556\n ESM3 1365428525740757 8 GLOBEX 1548.00 556\n ESM3 1365428525748502 9 GLOBEX 1548.00 557\n ESM3 1365428525748952 

(Ich kann das \n aus der quantity mit einem rstrip() entfernen, nachdem ich es hereingebracht habe.)

  • Probleme mit einer binären one-hot (one-of-K) Codierung in Python
  • Wie bekomme ich eine Liste aller doppelten Gegenstände mit Pandas in Python?
  • Pandas - kumulative Operationen auf dtype-Objekten
  • Konstruieren Sie Sequenzen aus einem Dataframe mit Wörterbüchern in Python
  • Bedingte Berechnung auf Pandas Dataframe
  • Wie kann man eine Gruppen-ID erstellen, die auf 5 Minuten Intervall in Pandas-Zeiten basiert?
  • Aufräumen von Excel-Daten mit Python mit Pandas-Paket
  • Tägliche Daten, Probe alle 3 Tage, berechnen über Schleppen 5 Tage effizient
  • 2 Solutions collect form web for “Lesen von Schlüsselwertpaaren in Pandas”

    Wenn Sie die Schlüsselnamen vorher kennen und wenn die Namen immer in der gleichen Reihenfolge erscheinen, dann könnten Sie einen Konverter verwenden, um die Schlüsselnamen abzuschneiden, und verwenden Sie dann den names , um die Spalten zu benennen:

     import pandas as pd def value(item): return item[item.find('=')+1:] df = pd.read_table('data.txt', header=None, delimiter=',', converters={i:value for i in range(5)}, names='symbol exchange timestamp price quantity'.split()) print(df) 

    Auf Ihre gebuchten Datenerträge

      symbol exchange timestamp price quantity 0 ESM3 GLOBEX 1365428525690751 1548.00 551 1 ESM3 GLOBEX 1365428525697183 1548.00 551 2 ESM3 GLOBEX 1365428525714498 1548.00 551 3 ESM3 GLOBEX 1365428525734967 1548.00 551 4 ESM3 GLOBEX 1365428525735567 1548.00 555 5 ESM3 GLOBEX 1365428525735585 1548.00 556 6 ESM3 GLOBEX 1365428525736116 1548.00 556 7 ESM3 GLOBEX 1365428525740757 1548.00 556 8 ESM3 GLOBEX 1365428525748502 1548.00 556 9 ESM3 GLOBEX 1365428525748952 1548.00 557 

    Ich bin mir nicht sicher, was der beste Weg, dies zu tun ist, aber vorausgesetzt, dass die Trennzeichen nicht in den Werten gefunden werden – es tut mir weh, mein Gehirn an die Eckkästen zu denken – dann ist so etwas nicht super-elegant Aber ist einfach:

     >>> df = pd.read_csv("esm.csv", sep=",|=", header=None) >>> df2 = df.ix[:,1::2] >>> df2.columns = list(df.ix[0,0::2]) >>> df2 symbol exchange timestamp price quantity 0 ESM3 GLOBEX 1365428525690751 1548 551 1 ESM3 GLOBEX 1365428525697183 1548 551 2 ESM3 GLOBEX 1365428525714498 1548 551 3 ESM3 GLOBEX 1365428525734967 1548 551 4 ESM3 GLOBEX 1365428525735567 1548 555 5 ESM3 GLOBEX 1365428525735585 1548 556 6 ESM3 GLOBEX 1365428525736116 1548 556 7 ESM3 GLOBEX 1365428525740757 1548 556 8 ESM3 GLOBEX 1365428525748502 1548 556 9 ESM3 GLOBEX 1365428525748952 1548 557 

    Im Grunde, lesen Sie es in, und dann die Pivot selbst, halten jedes andere Element und dann die Festsetzung der Spaltennamen.

    Python ist die beste Programmiersprache der Welt.