python使用xlrd获取列标题,并使用循环创建具有列标题的变量

2024-05-16 19:39:59 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个Excel文件,它有测试id(字符串和数字——我自己不命名它们……)和测试期间不同增量的结果(测试在特定的增量上执行):

Inc. SV-101 GB-B1A 67.5
1    300    226    547    
2    363    344    600
3    461    444    615
.    .      .      .
.    .      .      .
.    .      .      .
10   421    444    625

我想用xlrd打开文件。然后,我想创建一个循环,它使用测试的名称创建一个列表。例如:

^{pr2}$

我的最终目标是使用测试的结果,计算,比如,从增量4到9的斜率,然后绘制结果。说到这里,这是实现我最终目标的最好方法吗?在

我已经想出了(在很多帮助下)如何使用gnuplot实现这一点,但是我预见到它不可能满足我所需要的一切,所以我决定开始学习Python。在


Tags: 文件字符串名称id列表数字excel命名
1条回答
网友
1楼 · 发布于 2024-05-16 19:39:59

您的数据可以用于python的数字库numpy(但是您也可以使用Pandas,但这是基于numpy的)。对于绘图,您应该查看例如^{}。在

您需要的是将工作表中的每一行存储为结构化数组中的记录。这是因为每一行都是与同一事物(例如测量结果)相关的逻辑组。稍后,您可以通过第一行中给定的名称来访问所有这些名称,这些名称用于标识每个记录的含义。下面是将要工作的代码。在

>>> import xlrd
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> 
>>> wb = xlrd.open_workbook('sto.xls')
>>> sheet = wb.sheet_by_name('Sheet1')
>>> headers = [str(cell.value) for cell in sheet.row(0)]  # extra conversion to string required for later use in record array header
>>> headers
['Inc.', 'SV-101', 'GB-B1A', '67.5']
>>> arr = []
>>> for rowind in range(sheet.nrows)[1:]:
...     arr.append([ cell.value for cell in sheet.row(rowind)])
... 
>>> arr
[[1.0, 300.0, 226.0, 547.0], [2.0, 363.0, 344.0, 600.0], [3.0, 461.0, 444.0, 615.0]]
>>> data = np.rec.fromrecords(arr, names=headers)
>>> data
rec.array([(1.0, 300.0, 226.0, 547.0), (2.0, 363.0, 344.0, 600.0),
       (3.0, 461.0, 444.0, 615.0)], 
      dtype=[('Inc.', '<f8'), ('SV-101', '<f8'), ('GB-B1A', '<f8'), ('67.5', '<f8')])
>>> data['SV-101']  # You can access columns by their name
array([ 300.,  363.,  461.])
>>> data['67.5']  # bit of a strange header name
array([ 547.,  600.,  615.])
>>> # If you want to plot e.g. the 3rd column vs the 2nd, do this:
>>> plt.plot(data['SV-101'], data['GB-B1A'])
[<matplotlib.lines.Line2D object at 0x2af3c90>]
>>> plt.show()

至于确定记录4和9之间的“斜率”,你的问题有点不清楚。您可以表示每个连续记录(然后是每个列)之间的差异,在这种情况下,您将得到5个值(在我的示例中只有2个):

^{pr2}$

或者你只需要这两个点之间的切向斜率,在这种情况下,你可以在这些点上取你感兴趣的值(例如“GB-B1A”),然后除以相应独立变量的差值(例如“SV-101”):

>>> (data['GB-B1A'][2] - data['GB-B1A'][0])/(data['SV-101'][2] - data['SV-101'][0])
1.3540372670807452

顺便说一下,python变量的名称不能是testID_SV-101(因为破折号不是allowed in an identifier)或{}(因为点有不同的含义)。在

相关问题 更多 >