2017-09-18 3 views
0

Ich habe Pandas verwendet, um einige interessante Filterung von CSV-Dateien zu machen, aber sind in einen Roadblock geraten. Ich versuche, meine Indexspalte auf verstümmelte Textdaten (nicht ganzzahlige Daten) zu überprüfen und diese Zeilen zu entfernen. Ich habe versucht, sie aus dem Datenrahmen beim Import mit Bedingungen zu entfernen, und ich habe versucht, sie später ohne Erfolg iterieren. Hier ein Beispiel:Zeilen aus einem Datenframe mit einem nicht numerischen Index löschen

df = pd.read_csv(file, encoding='cp1252').set_index("numbers") 
results = df[df["columnA"].str.contains("search_data") & ~df["columnB"].isin(seach_list)] 
#I need to add to the above statement to check column "numbers" which I have set to be the index, 
#to catch some expected garbled text and filter it out... because it is 
#an integer, I can't use str.contains or isdigit or isalnum, I've tried to do len(df["columns"] < 20 , df.index < 20 .... i've tried 
#i've tried a few other options at this point as well 
# after bringing it in, I've also tried iterating through it: 
# 
for index, row in results.iterrows(): 
    if not (isinstance(row["numbers"], int)): 
     print(str(row["numbers"])) 
     #append whole row to new dataframe 
#This also didn't work 

Irgendwelche Gedanken, was ich tun kann?

Example data in the "numbers columns = 329381432 
Example garbled text in "numbers" column that I am 
trying to keep from importing: äu$ÒÔ”5$ò"Â$”äu$ÒÔ”5$ò 

Als Randbemerkung, hatte ich die Codierung der pd-Funktion zu ändern, so dass ich immer noch alle guten Daten in den Dateien lesen kann, wenn es einige nicht utf-8-Daten war ... sonst wäre es einen Fehler beim Import auslösen

Antwort

0

Sie können pd.to_numeric verwenden, um Ihre numbers Spalte in numerisch zu konvertieren. Alle nicht numerischen Einträge werden zu NaN gezwungen, und Sie können diese Zeilen dann einfach löschen.

df = pd.read_csv(file, encoding='cp1252') 
df['numbers'] = pd.to_numeric(df['numbers'], errors='coerce') 

df = df.dropna(subset=['numbers']).set_index('numbers') 
Verwandte Themen