2017-09-18 3 views
0

J'ai utilisé des pandas pour faire un filtrage intéressant des fichiers CSV, mais j'ai rencontré un obstacle. J'essaye de vérifier ma colonne d'index pour les données de texte brouillées (non-entier), et enlève ces lignes. J'ai essayé de les supprimer de l'élément de données lors de l'importation en utilisant des conditions, et j'ai essayé de les réitérer après coup sans succès. Voici un exemple:Supprimer des lignes d'une base de données avec un index non numérique

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 

Des idées sur ce que je peux faire?

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$ò 

Comme une note de côté, je devais changer le codage de la fonction pd pour que je puisse encore lire toutes les bonnes données dans les fichiers quand il y avait certaines données non utf-8 ... sinon il lancer une erreur lors de l'importation

Répondre

0

Vous pouvez utiliser pd.to_numeric pour convertir votre colonne numbers en numérique. Toutes les entrées non numériques seront contraints à NaN, et vous pouvez ensuite simplement supprimer ces lignes.

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

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