Python 如何使用openpyxl库从excel中获取时间序列数据?
我正在读取Excel文件,该文件每8秒更新一次传感器数据,并将其保存在auto.in中 我正在阅读的Excel表格包含:Python 如何使用openpyxl库从excel中获取时间序列数据?,python,excel,openpyxl,Python,Excel,Openpyxl,我正在读取Excel文件,该文件每8秒更新一次传感器数据,并将其保存在auto.in中 我正在阅读的Excel表格包含: 第2列是时间单位hh:mm:ss 第三栏是湿度 第4列是传感器1的温度值 第5列是压力值 第6列是传感器2的温度值 我使用以下代码获取时间序列数据: 导入matplotlib.pyplot作为plt 导入时间 将numpy作为np导入 从openpyxl导入加载工作簿 进口tkinter 将matplotlib.gridspec导入为gridspec wb=加载工作簿('
- 第2列是时间单位
hh:mm:ss
- 第三栏是湿度
- 第4列是传感器1的温度值
- 第5列是压力值
- 第6列是传感器2的温度值
导入matplotlib.pyplot作为plt
导入时间
将numpy作为np导入
从openpyxl导入加载工作簿
进口tkinter
将matplotlib.gridspec导入为gridspec
wb=加载工作簿('PLX\u DAQ.xlsm')
工作表1=wb。按工作表名称(“简单数据”)获取工作表
plt.图(figsize=(6,4),facecolor=(灰色)
G=gridspec.gridspec(6,2)
x=np.零(表1.最大行)
y=np.零(len(x))
z=np.0(len(x))
a=np.0(len(x))
b=np.零(len(x))
对于范围内的i(1,第1页,最大行):
x[i]=表1.单元格(行=i+1,列=2).值
y[i]=表1.单元格(行=i+1,列=3).值
z[i]=表1.单元格(行=i+1,列=4).值
a[i]=表1.单元格(行=i+1,列=5).值
b[i]=表1.单元格(行=i+1,列=6).值
plt.ion()
列表1=[]
列表2=[]
列表3=[]
列表4=[]
列表5=[]
对于范围(0,len(x))中的i:
列表1.追加(x[i])
列表2.追加(y[i])
清单3.追加(z[i])
清单4.追加(a[i])
清单5.追加(b[i])
时间。睡眠(8)
plt.散射(列表1、列表2,颜色为青色,标签为湿度)
plt.scatter(列表1,列表3,颜色='红色',标签='Temprature1')
plt.scatter(列表1、列表4,颜色为黄色,标签为压力)
plt.scatter(列表1、列表5,颜色为绿色,标签为温度2)
plt.grid(真)
plt.暂停(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'
runfile('C:/Users/tejas.a.patel/Desktop/pythonpracce/Spyder/Read Excel\u PLX-DAQ live plot-a.py',
wdir='C:/Users/tejas.a.patel/Desktop/pythonpracce/Spyder')
C:/Users/tejas.a.patel/Desktop/pythonpracce/Spyder/Read Excel_PLX-DAQ live plot-a.py:19:
弃用警告:调用弃用函数get_sheet_by_name(使用wb[sheetname])。
工作表1=wb。按工作表名称(“简单数据”)获取工作表
回溯(最近一次呼叫最后一次):
文件“”,第1行,运行文件('C:/Users/tejas.a.patel/Desktop/pythonpracce/Spyder/Read Excel_PLX-DAQ live plot-a.py',
wdir='C:/Users/tejas.a.patel/Desktop/pythonpracce/Spyder')
文件“C:\ProgramData\Anaconda3\lib\site packages\spyder\u kernels\customize\spyderrcustomize.py”,第827行,在运行文件中
execfile(文件名、命名空间)
文件“C:\ProgramData\Anaconda3\lib\site packages\spyder\u kernels\customize\spydercustomize.py”,第110行,在execfile中
exec(编译(f.read(),文件名,'exec'),命名空间)
文件“C:/Users/tejas.a.patel/Desktop/pythonpracce/Spyder/Read Excel_PLX-DAQ live plot-a.py”,第35行,in
x[i]=表1.单元格(行=i+1,列=2).值
TypeError:float()参数必须是字符串或数字,而不是“datetime.time”
请帮助问题在于您已将变量初始化为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等,然后在列表列表1、列表2、列表3中添加。。您可以在其中直接附加值
无论如何,由于某种原因,您正在使用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
有关更多信息,请查看以下链接:
请提供完整的回溯,并说明
x
和y
是什么。感谢回复,我编辑了我的帖子,并提供了我的代码和错误的详细信息。