社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

使用pandas dataframe python创建实时更新图

Joel.M • 7 年前 • 879 次点击  

我正试图通过从pandas数据框中提取结果来创建一个实时更新图,该数据框存储从本地服务器中获取的动态数据值。

使用pandas dataframe,需要时间并将其存储在一列中,然后将其使用情况存储在另一列中。然后,将其转储到结果表中。2秒后,它将花费时间并再次使用,然后将其追加到结果数据帧/表中。最终,它将在结果表中保留一个运行表:

    >>> print(results)
        time  kW
0   00:32:40   9
1   00:32:42  11
2   00:32:44  10
3   00:32:46  27
4   00:32:48  18
5   00:32:50  11

下面是我的代码,它可以清理本地服务器并将数据存储到这个数据框中。每次我重新运行脚本时,它都会获取存储的以前的数据并将新数据附加到其中,然后将csv文件(包含time&kw数据)写入指定的文件路径:

import requests
import bs4 
import time
import pandas as pd
from datetime import datetime
import glob
import os




def hasNumbers(inputString):
    return any(char.isdigit() for char in inputString)

def get_count():
    url = "http://10.0.0.206/temp_report.html"

    # request with fake header, otherwise you will get an 403 HTTP error
    r = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'})
    page_source = r.text
    # print(page_source)

    soup = bs4.BeautifulSoup(page_source, 'html.parser')
    #print(soup)


    data = soup.find_all('p')

    # Pull time
    data_time = data[0].text.split()
    data_time = [element for element in data_time if hasNumbers(element)][0]

    # Pull date
    data_date = data[1].text.split()
    data_date = [element for element in data_date if hasNumbers(element)][0]

    # Convert date and time to datetime data type
    data_datetime = data_date +' '+ data_time
    data_datetime = datetime.strptime(data_datetime, '%Y-%m-%d %H:%M:%S')

    # Pull usage and convert to data type int
    data_usage = data[2].text.split()
    data_usage = [element for element in data_usage if hasNumbers(element)][0]
    data_usage = int(data_usage)


    temp_df = pd.DataFrame(data = [[data_time, data_usage]], columns = ['time', 'kW'] )
    print('Date: %s     Time: %s      Usage: %s kW' %(data_date, data_time, data_usage))
    return temp_df



# change path_to_file string
path_to_file = 'C:/seniord/csusite/'    

# If folder doesn't exist, create it
if not os.path.exists(path_to_file):
    os.makedirs(path_to_file)

# get all files in that folder
fnames = glob.glob('*.csv')

# if there are no files, start with new dataframe
# else, get the most recently saved data and read that to continue appending
if fnames == []:
    results = pd.DataFrame()
else: 
    latest_file = max(fnames, key=os.path.getctime)
    results = pd.read_csv(path_to_file+latest_file)


date_stored = datetime.now().strftime('%Y_%m_%d_%HH_%M_%S') 
while True:
    df = get_count()
    results = results.append(df).reset_index(drop=True)
    #results.to_csv(path_to_file+'%s_kW_usage.csv' %(date_stored),index=False) #If you want to create a new csv file to the folder, uncomment this. Otherwise use the code below
    results.to_csv(path_to_file+'kW_usage.csv',index=False)

    time.sleep(2)

需要 :图形的y轴显示kw列,x轴显示相应的时间列。然后,我只想在图形或其他东西上方自动打印出日期戳(仅限日期)。

我非常感谢你们的指导

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/44103