使用pandas格式化列

时间:2016-03-24 22:28:54

标签: python csv pandas

我是Pandas和Python的新手。

我们有一个防火墙应用程序,可以CSV格式解析我们的ACL。 问题是 - 提供太多信息 - 数据格式使信息无用

到目前为止,我们一直在手动编辑这些查询。

我已经弄清楚如何使用熊猫来拉动"我们需要的列。 现在我需要将其中一列重新配置为正确的格式。

到目前为止,我的代码看起来像这样:

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

此时我要做的是将最后一行格式化为 将tcp移到端口号前面,然后删除' /'。 最终结果将是从ssh / tcp到tcp ssh

出于某种原因,我无法解决这个问题。

请帮忙。谢谢,

2 个答案:

答案 0 :(得分:1)

apply会将函数应用于系列中的所有内容。 事情是使功能。我把它称为开关和' x'是该系列中的所有数据。

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

df['Service'].apply(switch)

答案 1 :(得分:0)

您是否尝试使用处理过的服务列中的数据创建新列:

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]