2017-12-10 6 views
0

danke für Ihre Hilfe.Entfernen der Zeilen, für die Zellen in Pandas leer sind?

Ich habe eine große CSV-pseuodo-Patientendatensatz, die im Allgemeinen so aussieht.

Average Covered Charges , Total Discharges , Average Medicare Payments 
     32963.07   ,   91  ,   4763.73 
     15131.85   ,   14  ,   4976.71 
     37560.37   ,     ,   

Das Problem, das ich bin vor ist, dass ich die Gesamtzahl der Entladungen von mehr als 100 zu bekommen versuche, ... sondern weil eine der Spalten hat einen Wert mehr am Ende als alle anderen Zellen , die letzte Zelle der anderen Spalten hat nur einen leeren Platz, der als Element in der Länge des Datasets gezählt wird. Ich habe diese CSV-Datei in einen Pandas-Datenrahmen geladen und ich habe die NAs entfernt, und mein Datensatz sieht immer noch so aus.

Also NAs, None, etc ... ist nicht das Problem. Es ist eine leere Zelle, die bewirkt, dass die letzten zwei Spalten den Datentyp "Objekt" haben, und weil es eine leere Zelle/leeren Raum hat, ist es unmöglich, den "Objekt" -Datentyp auf "int" zu ändern ändere mein Dataframe, um so zu sehen, indem ich entferne alle Reihen in der Datenmenge, für die es irgendwelche leeren Zellen gibt in irgendwelchen der Spalten dann würden alle meine Probleme weggehen. So würde ich meine Daten-Set mag so aussehen:

Average Covered Charges , Total Discharges , Average Medicare Payments 
     32963.07   ,   91  ,   4763.73 
     15131.85   ,   14  ,   4976.71 

Ich bin überrascht, dass ich so eine harte Zeit, dies zu tun habe. Aber nach dem, was ich über Pandas gelesen habe, geht die Dokumentation davon aus, dass dies NAs sind und ich kann sie einfach fallen lassen, aber ich kann Pandas nicht dazu bringen, das überhaupt zu glauben.

import pandas as pd 
    inpatients_df = pd.read_csv("inpatient_payment_system.csv", low_memory = False) 

    inpatients_df.dropna(axis = 0, how = 'any') # Remove NA values. 

habe ich bereits im Datensatz geladen und alle NAs entfernt, nicht wie es ankommt.

Hinweis: Dieser Datensatz enthält viel mehr als drei Spalten. Es braucht nur eine Spalte, um mehr Entres zu haben als die anderen Spalten, und das Problem liegt tatsächlich in der letzten Zeile der CSV-Datei.

+0

Hat jede Zeile notwendigerweise die gleichen Patienten? Zum Beispiel, ist die Zeile '32963.07, 91, 4763.73' alle für eine Person? Wenn dies nicht der Fall ist, sollte es nicht in einem DataFrame gespeichert werden. Stattdessen sollte jede Spalte eine eigene separate Serie sein. – Sebastian

+0

Es ist jeder klinische Besuch. Wenn der Patient denselben Patienten ein anderes Mal kam und seine Adresse oder Versicherung änderte, dann wäre es eine neue Reihe. Das ist nicht wirklich wichtig. – xyz123

+0

Warum gibt es dann fehlende Werte am Ende einer der Spalten? Deshalb ist es eine wichtige Sache. – Sebastian

Antwort

1

nur eine der Spalten als eine Reihe bekommen, und damit arbeiten:

pd.to_numeric(df['Total Discharges'], errors='coerce').dropna() > 100).sum() 
+0

Wie OP sagte, hat er kein Problem mit nans, sondern mit leeren Strings. – Dark

+0

Ich kann Ihren Code nicht zum Funktionieren bringen. Wenn ich es ausführe, bekomme ich "TypeError: '>' nicht unterstützt zwischen Instanzen von 'str' und 'int'". Wie ich schon sagte, ich bekomme Pandas zu glauben, dass das ein na ist. – xyz123

+0

Bearbeitet, um das zu reflektieren. – Sebastian

1

Für diesen speziellen Fall sollten Sie die .isnumeric() Methode verwenden Sie die entsprechende Scheibe zu bekommen:

df[df['Total Discharges'].str.isnumeric()] 

Aber um Ihre Frage zu beantworten: Wahrscheinlichkeiten sind, die Einträge, die Sie leer aufrufen, sind wahrscheinlich leere Zeichenfolgen, also etwas wie

df[df['Total Discharges'] != ''] 

sollte den Trick machen, obwohl Sie den Wert in dieser Zelle sicher überprüfen möchten.

0

Try this:

inpatients_df.dropna(subset=['Total Discharges'], how='all', inplace = True) 
Verwandte Themen