在n行之后写成csv格式文件的列?

时间:2018-11-24 17:26:04

标签: python pandas csv dataframe file-io

我是python的新手。 我在处理csv文件时遇到问题。 这是一个具有12行标题的文件,在启动数据之后。 我必须从列中读取一些数据(确定可以),经过详细说明,我必须在每行中添加一个具有值的列,但第一列中没有任何ID,并且该列必须开始从第13行开始,而不是从第一行开始。

我尝试使用pandas库,但是它不起作用

df = pd.read_csv("./1540476113.gt.tie")
df["package"] = pd.Series(packages)
df.to_csv("./1540476113.gt.tie", sep = "\t")

其中package是列的名称(但我也知道索引),而package是字符串数组(我必须写的元素)。 该代码有效,但从第一行开始添加(我不知道如何设置偏移量),并将第一列中的索引(不需要)和每个元素之前的char'添加到文件中。 sep是每一列的分隔符。

样本输入数据:

# TIE output version: 1.0 (text format)
# generated by: . -a ndping_1.0 -r /home/giuseppe/Scrivania/gruppo30/1540476113/traffic.pcap

# Working Mode: off-line
# Session Type: biflow
# 1 plugins enabled: ndping

# begin trace interval: 1540476116.42434

# begin TIE Table
# id    src_ip          dst_ip          proto   sport   dport   dwpkts  uppkts  dwbytes upbytes t_start                 t_last                  app_id  sub_id  app_details     confidence
17      192.168.20.105  216.58.205.42   6       50854   443     8       9       1507    1728    1540476136.698920       1540476136.879543       501     0       Google  100
26      192.168.20.105  151.101.66.202  6       40107   443     15      18      5874    1882    1540476194.196948       1540476204.641949       501     0       SSL_with_certificate    100
27      192.168.20.105  31.13.90.2      6       48133   443     10      15      4991    1598    1540476194.218949       1540476196.358946       501     0       Facebook        100

示例输出数据:

# TIE output version: 1.0 (text format)
# generated by: . -a ndping_1.0 -r           /home/giuseppe/Scrivania/gruppo30/1540476113/traffic.pcap 

# Working Mode: off-line
# Session Type: biflow 
# 1 plugins enabled: ndping 

# begin trace interval: 1540476116.42434

# begin TIE Table
# id    src_ip      dst_ip      proto   sport   dport   dwpkts  uppkts  dwbytes upbytes t_start         t_last          app_id  sub_id  app_details confidence  package
17  192.168.20.105  216.58.205.42   6   50854   443 8   9   1507    1728    1540476136.698920   1540476136.879543   501 0   Google  100  N/C    
26  192.168.20.105  151.101.66.202  6   40107   443 15  18  5874    1882    1540476194.196948   1540476204.641949   501 0   SSL_with_certificate    100 com.joelapenna.foursquared
27  192.168.20.105  31.13.90.2  6   48133   443 10  15  4991    1598    1540476194.218949   1540476196.358946   501 0   Facebook    100 com.joelapenna.foursquared  
38  192.168.20.105  13.32.71.69 6   52108   443 9   12  5297    2062    1540476195.492946   1540476308.604998   501 0   SSL_with_certificate    100 com.joelapenna.foursquared
0   34.246.212.92   192.168.20.105  6   443 37981   3   2   187 98  1540476116.042434   1540476189.868844   0   0   Other TCP   0   N/C
29  192.168.20.105  13.32.123.222   6   36481   443 11  15  6638    1914    1540476194.376945   1540476308.572998   501 0   SSL_with_certificate    100 com.joelapenna.foursquared  
31  192.168.20.105  8.8.8.8 17  1219    53  1   1   253 68  1540476194.898945   1540476194.931198   501 0   DNS 100

我不在乎alinemen,每列的定界符是'\ t'。

1 个答案:

答案 0 :(得分:0)

您可以通过向read_csv传递一些参数来跳到数据。

df = pd.read_csv("./1540476113.gt.tie", header=None, skiprows=12)
df["package"] = pd.Series(packages)
df.to_csv("./1540476113.gt.tie", sep = "\t")

然后显式命名您的列:

df.columns = [col_names]

如果第13行是具有所需列名的标题行,则不要传递header=None参数。

在文档here中查看更多信息。