2017-10-17 6 views
2

J'ai actuellement une tâche qui consiste à télécharger un fichier maître CSV, en supprimant toutes les lignes où la colonne A - Colonne B < = 0, et où la colonne C est égale à une phrase donnée. Je cherche à créer un programme qui:Filtrer le programme de fichiers CSV en utilisant Pandas et Python

  • Importer un fichier CSV
  • Supprimez toutes les lignes où la colonne A - colonne B < = 0
  • Demandez entrée pour filtrer sur la colonne C pour une ou plusieurs phrases
  • Export CSV dans un nouveau fichier

jusqu'à présent, j'ai déterminé que la meilleure façon de le faire est d'utiliser la fonctionnalité de dataframe de Pandas, comme je l'ai utilisé précédemment pour exécuter d'autres opérations sur CSV fichiers:

import pandas as pd 
 

 
file = read_csv("sourcefile.csv") 
 
file['NewColumn'] = file['A'] - file['B'] 
 
file = file[file.NewColumn > 0] 
 
columns = ['ColumnsIWantToRemove'] 
 
file.drop(columns, inplace=True, axis=1) 
 
phrases = input('What phrases are you filtering for? ') 
 
file = file[file.C = phrases] 
 
file.to_csv('export.csv')

Ma question est, comment dois-je filtrer la colonne C pour plusieurs phrases? Je veux que le programme prenne une ou plusieurs phrases et affiche seulement les lignes où la valeur de la colonne C est égale à l'une de ces valeurs. Toute orientation serait incroyable. Je vous remercie!!

Répondre

0

Je voudrais juste demander à être entrée séparées par des virgules:

phrases = phrases.split(",") 
file = file[file.C.isin(phrases)] 
+0

J'ai essayé, mais il ne semble pas être le filtrage et quand j'exporte le fichier de données, il apparaît vide. Des idées? – dner

+0

@dner instructions d'impression sont votre ami ici, vous devriez essayer d'imprimer des phrases avant et après la scission, puis vous pouvez voir si vous pouvez répliquer cela dans le repl (par exemple ipython). –

0

peut-être cela peut vous aider:

import csv 

input = open(sourcefile.csv, 'rb') 
output = open(out_sourcefile, 'wb') 
writer = csv.writer(output) 
for row in csv.reader(input): 
    if (phrases you want C column not to be,and you can add here multiple phrases): 
     continue 
     writer.writerow(row) 
input.close() 
output.close() 
+0

Cela ne semble pas fonctionner parce que nous avons des centaines de phrases que nous ne voulons pas garder – dner