Ich entwickle Werkzeuge basierend auf Pandas DataFrame Objekte. Ich möchte Scipy Sparse-Matrizen als Spalte eines DataFrames herumführen, ohne sie zeilenweise in ein Listen-/Numy-Array von dtype ('O') zu konvertieren.Scipy spärlich Matrix als DataFrame Spalte
Das folgende Snippet funktioniert nicht, da Pandas die Matrix als Skalar behandeln und schlägt vor, einen Index hinzuzufügen. Wenn ein pd.RangeIndex über die Zeilenindizes in der Matrix gesetzt wird, wird die Matrix für jede Zeile im Datenrahmen wiederholt (da Pandas denkt, dass es ein Skalar ist).
ma = scipy.sparse.rand(10, 100, 0.1, 'csr', dtype=np.float64)
df = pd.DataFrame(dict(X=ma))
Dies funktioniert:
df = pd.DataFrame(dict(X=list(ma)))
Dies ist jedoch die Matrix zeilenweise in CSR-Matrizen mit jeweils 1 Zeile zerschneidet. Das würde ich dann jedesmal wieder einbauen müssen, wenn ich an der ursprünglichen Matrix arbeiten möchte.
Irgendwelche Zeiger? Ich habe versucht, die CSR-Matrix in ein pd.Series-Objekt zu verpacken, indem ich vorgab, dptype ('O') zu haben, aber ich habe viele Annahmen über die zugrundeliegenden Daten getroffen, bei denen es sich um numpige Arrays und dergleichen handelt.
Danke @hpaulj für die Antwort. Ich bin eigentlich nicht daran interessiert, die SciPy-Matrix spaltenweise durch Pandas, nur zeilenweise oder die Matrix als Ganzes zu erreichen. Ich verstehe die Diskrepanz zwischen NDarray und den Sparse-Matrix-Typen auf einer Speicherlayout-Ebene. Ich hatte gehofft, dass es eine Abstraktion gab, in die beide passen konnten ... 'list (ma)' ist nicht bedeutungslos, zumindest für eine CSR-Matrix erstellt es CSR-Matrizen einer Reihe für jede Reihe in der ursprünglichen CSR-Matrix. –
Ich sehe nicht, wie eine Matrix (2d), dicht oder sparse, als eine Spalte eines Dataframe verwendet werden kann. Ich glaube, Pandas werden versuchen, die Spalten eines 2D-Arrays auf eine gleiche Anzahl von Spalten abzubilden. Zellen können auch Objektzeiger, aber keine ganze Spalte sein. Aber ich kenne numpy und scipy besser als ich Pandas kenne. – hpaulj
Danke nochmal. Ich verstehe. Wäre ein geeigneter Ort, um eine CSR-Matrix von Merkmalsvektoren zu speichern, wo eine Zeile z. ein Label in einer anderen Spalte des DataFrames und in der Lage zu sein, auf die zugrunde liegende CSR-Matrix zuzugreifen _ohne_ zu kopieren oder wieder zusammen zu stapeln. Ich kann nicht alles haben, denke ich :) –