【问题标题】:Pandas -Plotting index of data frame against a data framePandas - 根据数据框绘制数据框的索引
【发布时间】:2020-06-25 04:17:11
【问题描述】:

我需要绘制一些索引值,如 Pandas - Calculate Relative time from csv 中所述

示例数据
这是一个巨大的文件,这只是它的一个 sn-p

highest_layer,transport_layer,src_ip,dst_ip,src_port,dst_port,ip_flag,packet_length,transport_flag,time,timestamp,geo_country,data
    LAN_DISCOVERY,UDP,192.168.1.6,224.0.0.251,5353,5353,0,82,-1,2020-06-10 19:38:08.479232,1591832288479,Unknown,        LAN_DISCOVERY,UDP,fe80::868:621b:c2ff:cee2,ff02::fb,5353,5353,-1,102,-1,2020-06-10 19:38:08.479261,1591832288479,Unknown,        LAN_DISCOVERY,UDP,192.168.1.3,192.168.1.6,5353,5353,16384,409,-1,2020-06-10 19:38:08.506399,1591832288506,Unknown,
    DNS,UDP,192.168.1.6,192.168.1.1,32631,53,0,89,-1,2020-06-10 19:38:08.863846,1591832288863,Unknown,
    DNS,UDP,192.168.1.6,192.168.1.1,31708,53,0,79,-1,2020-06-10 19:38:08.864186,1591832288864,Unknown,
    DNS,UDP,192.168.1.6,192.168.1.1,16807,53,0,79,-1,2020-06-10 19:38:08.866492,1591832288866,Unknown,
    SSDP,UDP,192.168.1.6,239.255.255.250,58185,1900,0,216,-1,2020-06-10 19:38:08.887298,1591832288887,Unknown,
    TCP,TCP,192.168.1.6,208.117.252.25,53725,443,16384,66,16,2020-06-10 19:38:10.107603,1591832290107,Unknown,
    TCP,TCP,192.168.1.6,208.117.252.25,53725,443,16384,66,16,2020-06-10 19:38:10.109444,1591832290109,Unknown,
    TCP,TCP,192.168.1.6,208.117.252.25,53725,443,16384,66,16,2020-06-10 19:38:10.109847,1591832290109,Unknown,
    TCP,TCP,192.168.1.6,208.117.252.25,53725,443,16384,66,16,2020-06-10 19:38:10.111238,1591832290111,Unknown,
    TCP,TCP,192.168.1.6,208.117.252.25,53725,443,16384,66,16,2020-06-10 19:38:10.111676,1591832290111,Unknown,

代码:

datadis = pd.read_csv('data.txt', sep=',')
dfd = (datadis[(datadis.src_port == 53725)])
if not dfd.empty:  # only proceed if the dataframe is not empty
    dfd1 = dfd.drop(columns=['highest_layer', 'transport_layer','ip_flag', 'transport_flag','geo_country','data']).reset_index()
    dfd1.index = dfd1['timestamp'] - dfd1.loc[0,'timestamp']
    dfd2 = dfd1.groupby(['src_ip'])['packet_length'].cumsum()
    dfd2.plot(x='timestamp',y=['packet_length'])

我想在 x 轴上绘制相对时间戳(dfd1.index),在 y 轴上绘制 dfd2。假设时间戳的差异从 3000 开始,我希望绘图在 x 轴上从 3000 而不是 0(在上面给出的示例中从 0 开始)开始。

【问题讨论】:

  • 您能否在问题中添加一些示例数据?见stackoverflow.com/questions/20109391/…
  • 我不确定这个请求是否有意义。索引为dfd1['timestamp'] - dfd1.loc[0,'timestamp'],这意味着从timestamp 列中的每个值中减去timestamp 列中的第一个值。这意味着,timestamp 列中的第一个值始终从自身中减去,因此第一个索引值将始终为 0
  • @TrentonMcKinney 是的
  • @Roy2012 是我发布了同样的问题。无论如何,我也添加了这个问题的数据
  • 按端口过滤后,数据框为空。如果您可以发布一个最小的可重现示例,那就太好了。几行就足够了。

标签: python pandas


【解决方案1】:

如果我理解正确,您是在尝试将一个数据帧 (dfd2) 的时间戳与另一个数据帧 (dfd1) 的列进行对比。

简单的方法如下:

import matplotlib.pyplot as plt
plt.plot(dfd2, dfd1.packet_length)
plt.show()

对于问题中的样本数据,结果是:

如您所见,x 轴不是以 0 开头,而是以 ~66 开头,这是该数据中的第一个时间戳。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 2016-12-31
    • 2020-10-22
    相关资源
    最近更新 更多