Was passiert, wenn ich brauche Spalten mit gemischten Typen zu bekommen?

stimmen
0

Pandas: 0.23.4

Gemäß der Dokumentation DtypeWarning, erhalten wir: Spalten (0) haben Typen gemischt , wenn die Daten enthalten intund strund es wird vorgeschlagen, low_memory = False zu setzen , und dies beseitigt die Warnung. Aber meine Aufgabe ist das Gegenteil: In den Spalten mit gemischten Typen zu definieren!

Zuerst dachte ich die DtypeWarning Nachricht zu analysieren, damit ich verstehen konnte, welche Spalten gemischt Art hat, aber ich begegnet vielen Schwierigkeiten, die mich hindern auf DtypeWarning berufen:

  1. Wenn Sie die Anzahl der Zeilen von 300.000 auf 250.000 reduzieren, dann DtypeWarning nicht mehr angezeigt wird, aber ich brauche es für mindestens 100.000 Zeilen
  2. Auch für 300.000 Zeilen, wird die Spalte nicht immer mit gemischten Typen bestimmt, zum Beispiel I Datenrahmen von ändern doc :

Aus der Dokumentation:

df = pd.DataFrame({'a': (['1'] * 100000 + ['X'] * 100000 + ['1'] * 100000), 'b': ['b'] * 300000})
df.to_csv('test.csv', index=False)
df2 = pd.read_csv('test.csv')
# DtypeWarning: Columns (0) have mixed types

Mein Fall:

df = pd.DataFrame({'a': ([1] * 10000 + ['X'] * 10000 + [1] *  10000) * 10, 'b': ['b'] * 300000})
df.to_csv('test.csv', index=False)
df2 = pd.read_csv('test.csv')
# No warning

Es hat immer noch Typen gemischt, aber Warnung erscheint nicht. Und wenn ich Typen analysieren, alle diese sind str. Dh ich kann nicht Mischtypen auch von mir selbst analysieren.

Also, wie kann ich Spalten mit gemischten Typen bekommen? Ist es möglich, die Parameter read_csv (mixed_types = True) und zwingen die Pandas hinzufügen nicht Mischtypen für alle Datensätze oder für mindestens 100 000 Zeilen zu verbergen? Oder irgendwelche Ideen?

Vielen Dank.

Zusammenfassung

Es scheint , dass Pandas darf nicht wissen , welche Spalten gemischte Typen haben, sondern im Gegenteil verbirgt Mischtypen hinter dem dtype objectmit nach strinnen. DtypeWarning als Ausnahme von der Regel. Die Verbindung von @pygo Antwort erklärt die Zufälligkeit des DtypeWarning.

Veröffentlicht am 20/10/2018 um 12:27
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

Es sollte sowohl die Zeile & Spalten arbeiten.

low_memory: boolean, default Wahr

Intern verarbeitet die Datei in Blöcken, in den unteren Speicher resultierende beim Parsen, aber möglicherweise gemischt Typinferenz. Um sicherzustellen, dass entweder keine Mischtyp False festgelegt, oder die Art mit dem dtype Parameter angeben. Beachten Sie, dass die gesamte Datei in einen einzigen Datenrahmen gelesen wird, unabhängig, verwenden Sie die chunksize oder Iterator Parameter, um die Daten in Blöcken zurückzukehren. (Nur gültig mit C-Parser)

Dies ist von Github Seite

Es ist deterministisch - Typen sind konsequent auf Basis inferred auf das, was in den Daten ist. Das heißt, ist der interne chunksize keine feste Anzahl von Zeilen, sondern Bytes, also, ob Sie eine gemischte dtype Warnung oder kein bisschen zufällig fühlen kann.

Ich denke, Sie sollten nicht über diese Nachricht gestört, da diese Fehlermeldung generisch ist.

ODER

df2 = pd.read_csv('test.csv', engine='c', dtype={'FULL': 'str', 'COUNT': 'int'}, header=1)
Beantwortet am 20/10/2018 um 12:45
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more