2016-03-24 22 views
0

Ich bin neu bei Pandas und Python.Formatieren einer Spalte mit Pandas

Wir haben eine Firewall-Anwendung, die unsere ACLs im CSV-Format analysiert. Das Problem ist -es viel zu viel Info -der Format der Daten liefert macht die Informationen nutzlos

Wir haben bisher von Hand diese Abfragen bearbeiten.

Ich habe herausgefunden, wie man Pandas verwendet, um die Spalten zu "ziehen", die wir brauchen. Jetzt muss ich eine der Spalten in das richtige Format umkonfigurieren.

Bisher sieht mein Code wie folgt aus:

import pandas as pd 
    f=pd.read_csv("/Volumes/Untitled/ACL-SOURCE.csv") 
    keep_col = ['Device name','Source','Destination','Service'] 
    new_f = f[keep_col] 

# this pulls the 4 columns I ned out of the original 20 column CSV. 

# If I do a print of 'new_f" i get the following: 

    Device name  Source Destination  Service 
0 ACL-NAME-V1  ABC-123  MEC-KLM  ssh/tcp 
1 ACL-NAME-V1  ABC-123  MEC-KLM  3306/tcp 
2 ACL-NAME-V1  MEC-456  MEC-KLM  ssh/tcp 
3 ACL-NAME-V1  MEC-456  MEC-KLM  3306/tcp 
4 ACL-NAME-V1  MEC-456  MEC-KLM  4444/tcp 
5 ACL-NAME-V1  MEC-456  MEC-KLM  8888/tcp 
6 ACL-NAME-V1  MEC-456  MEC-KLM 4567-4568/tcp 
7 ACL-NAME-V1  MEC-456  MEC-KLM   icmp 

An diesem Punkt, was ich tun möchte, ist die letzte Zeile formatieren Sie die tcp vor dem Portnummer Verschieben und entfernen Sie die ‚/‘. das Endergebnis wird von ssh/tcp zu tcp ssh sein

aus irgendeinem Grund kann ich meinen Kopf nicht um diese zu wickeln.

Bitte helfen. Danke,

+0

Ich verstehe nicht wirklich, was Sie wollen, dass "letzte Zeile" vs Spalte? aussehen? Gib ein Beispiel? von was es ist (was ich denke, wir haben) und was du willst? Und ist das nur die letzte Zeile, die ICMP hat? Ist das Problem immer letzte Zeile oder Zeilen, die ICMP haben? oder ist es ssh verwandt? Originalen Rohtext anzeigen? – dartdog

Antwort

0

Haben Sie neue Spalte zu erstellen versucht, mit Daten aus Spalte Dienst verarbeitet:

import pandas as pd 
    f=pd.read_csv("/Volumes/Untitled/ACL-SOURCE.csv") 
    f.assign(srv = f['Service'].split('/')[1] + " " + f['Service'].split('/')[0]) 
    keep_col = ['Device name','Source','Destination','srv'] 
    new_f = f[keep_col] 
+0

Sie würden einen Indexfehler erhalten, wenn Sie diese Zeile 7 treffen. Zeile 7 Dienst hat kein '/' zu teilen. – Back2Basics

1

eine Funktion, um alles in der Serie gelten gelten. Die Sache ist, die Funktion zu machen. Ich nannte es Schalter und 'x' sind alle Daten in der Serie.

def switch(x): 
    a = x.split('/') 
    a.reverse() 
    return ' '.join(a) 

df['Service'].apply(switch) 
+0

Das funktioniert. Aber wie füge ich den neu formatierten "Service" wieder zu meiner Tabelle hinzu? – fl31

+0

Sie können df ['Service'] = df ['Service'] anwenden (Schalter) – Back2Basics

+0

Das hat wie ein Charme funktioniert !! – fl31

Verwandte Themen