我正在读取Excel文件,该文件每8秒更新一次传感器数据并将其保存在auto.in中
我正在阅读的Excel工作表包含:
hh:mm:ss
我正在使用以下代码来获取时间序列数据:
import matplotlib.pyplot as plt
import time
import numpy as np
from openpyxl import load_workbook
import tkinter
import matplotlib.gridspec as gridspec
wb = load_workbook('PLX_DAQ.xlsm')
sheet_1 = wb.get_sheet_by_name('Simple Data')
plt.figure(figsize=(6, 4), facecolor='Grey')
G = gridspec.GridSpec(6, 2)
x = np.zeros(sheet_1.max_row)
y = np.zeros(len(x))
z = np.zeros(len(x))
a = np.zeros(len(x))
b = np.zeros(len(x))
for i in range(1, sheet_1.max_row):
x[i] = sheet_1.cell(row=i + 1, column=2).value
y[i] = sheet_1.cell(row=i + 1, column=3).value
z[i] = sheet_1.cell(row=i + 1, column=4).value
a[i] = sheet_1.cell(row=i + 1, column=5).value
b[i] = sheet_1.cell(row=i + 1, column=6).value
plt.ion()
list1 = []
list2 = []
list3 = []
list4 = []
list5 = []
for i in range(0,len(x)):
list1.append(x[i])
list2.append(y[i])
list3.append(z[i])
list4.append(a[i])
list5.append(b[i])
time.sleep(8)
plt.scatter(list1, list2, color='cyan', label='Humidity')
plt.scatter(list1, list3, color='red', label='Temprature1')
plt.scatter(list1, list4, color='yellow', label='Pressure')
plt.scatter(list1, list5, color='green', label='Temprature2')
plt.grid(True)
plt.pause(0.5)
这给了我以下错误,
runfile('C:/Users/tejas.a.patel/Desktop/Pythonpractice/Spyder/Read Excel_PLX-DAQ live plot-a.py', wdir='C:/Users/tejas.a.patel/Desktop/Pythonpractice/Spyder') C:/Users/tejas.a.patel/Desktop/Pythonpractice/Spyder/Read Excel_PLX-DAQ live plot-a.py:19: DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]). sheet_1 = wb.get_sheet_by_name('Simple Data') Traceback (most recent call last): File "<ipython-input-1-f101b726f4c2>", line 1, in <module> runfile('C:/Users/tejas.a.patel/Desktop/Pythonpractice/Spyder/Read Excel_PLX-DAQ live plot-a.py', wdir='C:/Users/tejas.a.patel/Desktop/Pythonpractice/Spyder') File "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 827, in runfile execfile(filename, namespace) File "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile exec(compile(f.read(), filename, 'exec'), namespace) File "C:/Users/tejas.a.patel/Desktop/Pythonpractice/Spyder/Read Excel_PLX-DAQ live plot-a.py", line 35, in <module> x[i] = sheet_1.cell(row=i + 1, column=2).value TypeError: float() argument must be a string or a number, not 'datetime.time'
请帮助
答案 0 :(得分:1)
问题在于您已将变量初始化为float:
x = np.zeros(sheet_1.max_row)
y = np.zeros(len(x))
z = np.zeros(len(x))
a = np.zeros(len(x))
b = np.zeros(len(x))
检查方式:
x.dtype
您会得到
dtype('float64')
现在您正在尝试将Python datetime.time对象分配给该变量,这就是它引发异常的原因。 我不知道您为什么要使用x,y,z等,然后在列表list1,list2,list3 ..中附加内容。在这里您可以直接附加值。
无论如何,您出于某种原因正在使用,然后一种解决方法是将datetime.time对象转换为秒(或分钟或小时,无论您喜欢什么)然后分配。
time_ = (sheet_1.cell(row=i + 1, column=2).value) # ex08:32:10
time_in_sec = time_.hour*60*60 + time_.minute*60 +time_.second
#print(type(time_))
#print(type(time_.isoformat()))
print(time_in_sec)
x[i] = time_in_sec # assign to variables
有关更多信息,请检查链接: https://docs.python.org/3.4/library/datetime.html?highlight=weekday#time-objects