从分组数据框中获取用户输入并绘制图表
Posted
技术标签:
【中文标题】从分组数据框中获取用户输入并绘制图表【英文标题】:take user input from a grouped dataframe and plot graph 【发布时间】:2021-01-08 10:28:14 【问题描述】:我有 CSV 数据,其中包含 IP 地址和相应的时间戳。这个我已经安排在一个数据框中
IP_Address Time
1xx.1xx.1xx.xx 2020-06-30 23:48:37
1xx.6x.2xx.1xx 2020-06-30 23:48:37
... ...
xx.2xx.xxx.xx 2020-07-01 06:25:42
我想绘制一个特定 IP 地址的图表,取自用户作为输入,然后绘制它在不同时间间隔内被命中的次数。含义,对于给定的 IP 地址:
在 X 轴上,我想要调用 IP 时的不同时间戳
在 Y 轴上,我想要在 X 轴上的给定时间值内调用 IP 的次数。
# -*- coding: utf-8 -*-
"""
Spyder Editor
This is a temporary script file.
"""
import csv
import pandas as pd
import datetime
#from time import mktime
from datetime import datetime
# read the CSV file using csv.reader method of CSV module and print the lines in a list
with open ('File1_csv.txt') as csvfile:
readCSV = csv.reader(csvfile, delimiter=',')
ipaddress = []
time = []
for lines in readCSV:
#(lines[1] , lines[18] , lines[20])
ipaddress.append(lines[20])
dt_object = datetime.fromtimestamp(int(lines[1]))
# dt_object1=dt_object.strftime("%d %m %Y")
# print("dt_object =" , dt_object1)
#print("type(dt_object) =" , type(dt_object))
time.append(dt_object)
#print(ipaddress)
#print(time)
#from pandas import DataFrame
df = pd.DataFrame ('IP_Address' : ipaddress , 'Time' : time)
print(df)
x = df['Time'].value_counts()
print(x)
y = df['IP_Address'].value_counts()
print(y)
input_ip = input("Enter the IP Address to see the number of pings")
print(input_ip)
import matplotlib as plot
#df_graph = pd.DataFrame ('Time' : time , 'Date Count' : df['Time'].value_counts())
#df['Time'].value_counts()[:20].plot(x ='Time', y='IP Address Hits',kind='bar')
#df['IP_Address'].value_counts()[:20].plot(x = 'IP' , y = 'IP Address Hits' , kind ='bar')
df['input_ip'].plot(x = 'IP' , y = 'IP Address Hits' , kind ='bar')
#gb = df.groupby(ipaddress).count()
#print(df)
#print(df_graph) code here
【问题讨论】:
还有什么问题? 那么你需要按 ip 对数据进行分组,然后遍历每个组并绘制数据df[df.eq(input_ip).any(1)]
此语句无需group by 即可工作
【参考方案1】:
df[df.eq(input_ip).any(1)]
这个语句不需要 group by 就可以工作
【讨论】:
以上是关于从分组数据框中获取用户输入并绘制图表的主要内容,如果未能解决你的问题,请参考以下文章