Wie kann ich mithilfe von pandas read_clipboard effektiv Daten zu Fragen zum Stapelüberlauf laden?
Ich stelle fest, dass viele Pandas-Fragen zu Stack Overflow nur einige Zeilen ihrer Daten als Text enthalten, ohne den zugehörigen Code zum Generieren / Reproduzieren. Ich bin mir der Existenz bewusst, kann read_clipboardaber nicht herausfinden, wie diese Funktion effektiv aufgerufen werden kann, um Daten in vielen Situationen zu lesen, z. B. wenn die Headernamen Leerzeichen enthalten, oder Python-Objekte wie Listen in den Spalten.
Wie kann ich pd.read_clipboard
Daten, die in unkonventionellen Formaten eingefügt wurden und sich nicht einfach mit den Standardargumenten lesen lassen, effektiver lesen? Gibt es Situationen, in denen read_clipboard
es zu kurz kommt?
Antworten
read_clipboard: Ratgeber für Anfänger
read_clipboardist wirklich eine Rettung für jeden, der anfängt, Fragen im Pandas- Tag zu beantworten . Leider wissen Pandas-Veteranen auch, dass die in Fragen angegebenen Daten aufgrund verschiedener Komplikationen im Format der veröffentlichten Daten nicht immer einfach in ein Terminal zu gelangen sind.
Zum Glück read_clipboard
hat Argumente, die die Behandlung der meisten dieser Fälle möglich (und einfach) machen. Hier sind einige häufige Anwendungsfälle und ihre entsprechenden Argumente.
Häufige Anwendungsfälle
read_clipboard
wird read_csv
unter der Haube mit Leerzeichen-Trennzeichen verwendet, daher gelten hier viele Techniken zum Parsen von Daten aus CSV, z
Analysieren von Spalten mit Leerzeichen in den Daten
Verwendung
sep
mit Regex-Argument. Stellen Sie zunächst sicher, dass zwischen den Spalten mindestens zwei Leerzeichen und höchstens ein aufeinanderfolgendes Leerzeichen in den Daten der Spalte selbst vorhanden sind. Dann können Sie Folgendes verwendensep=r'\s{2,}'
: "Spalten trennen, indem Sie nach mindestens zwei aufeinander folgenden Leerzeichen für das Trennzeichen suchen" (Hinweis:engine='python'
ist für Trennzeichen mit mehreren Zeichen oder regulären Ausdrücken erforderlich):df = pd.read_clipboard(..., sep=r'\s{2,}', engine='python')
Siehe auch Wie gehen Sie mit Spaltennamen um, die Leerzeichen enthalten, wenn Sie pd.read_clipboard verwenden? .
Lesen einer Serie anstelle von DataFrame
Verwenden
squeeze=true
Sie wahrscheinlich auch,header=None
wenn die erste Zeile auch Daten enthält.s = pd.read_clipboard(..., header=None, squeeze=True)
Siehe auch Könnte es eine einfachere Möglichkeit geben, mit pandas read_clipboard eine Serie zu lesen? .
Laden von Daten mit benutzerdefinierten Headernamen
Verwendung
names=[...]
in Verbindung mitheader=None
undskiprows=[0]
zum Ignorieren vorhandener Header.df = pd.read_clipboard(..., header=None, names=['a', 'b', 'c'], skiprows=[0])
Laden von Daten ohne Header
- verwenden
header=None
- verwenden
Legen Sie eine oder mehrere Spalten als Index fest
- Verwenden Sie
index_col=[...]
mit dem entsprechenden Etikett oder Index
- Verwenden Sie
Analysedaten
- Verwenden Sie
parse_dates
mit dem entsprechenden Format. Beim Parsendatetimes
(dh Spalten mit durch Zeitstempel getrenntem Datum) müssen Sie wahrscheinlich auch verwenden,sep=r'\s{2,}'
während Sie sicherstellen, dass Ihre Spalten durch mindestens zwei Leerzeichen getrennt sind.
- Verwenden Sie
In dieser Antwort von mir finden Sie eine umfassendere Liste der read_csv
Argumente für andere Fälle, die hier nicht behandelt werden ...
Vorsichtsmaßnahmen
read_clipboard
ist ein Schweizer Taschenmesser. Wie auch immer, es
Daten können nicht in hübschen Tabellen- / Tabellenformaten gelesen werden (IOW, Rahmen erschweren dies)
- Siehe Einlesen eines hübsch gedruckten / formatierten Datenrahmens mit pd.read_clipboard? für Lösungen, um dies anzugehen.
MultIndexes können nur dann korrekt analysiert werden, wenn alle Elemente im Index angegeben sind.
- Siehe Kopieren von MultiIndex-Datenrahmen mit pd.read_clipboard? für Lösungen, um dies anzugehen.
Ellipsen in Daten können nicht ignoriert / verarbeitet werden
- Meine vorgeschlagene Methode besteht darin, Ellipsen vor dem Drucken manuell zu entfernen
Spalten von Listen (oder anderen Objekten) können nur als Zeichenfolge analysiert werden. Die Spalten müssen separat konvertiert werden, wie unter Wie liest man einen Datenrahmen mit Listen mit pd.read_clipboard ein? .
kann keinen Text aus Bildern lesen (bitte verwenden Sie Bilder nicht als Mittel, um Ihre Daten mit anderen zu teilen, bitte!)
Die einzige Schwäche dieser Funktion ist, dass sie keinen Inhalt erfasst, CTRL + C
wenn die Kopie aus einer PDF
Datei ausgeführt wird. Das Testen auf diese Weise führt zu einem leeren Lesevorgang.
Aber mit einem normalen Texteditor geht es gut. Hier ist ein Beispiel mit zufällig eingegebenem Text:
>>> pd.read_clipboard()
Empty DataFrame
Columns: [sfsesfsdsxcvfsdf]
Index: []