我有一张excel表,其中包含日期,时间和温度,如下所示:
使用python,我想将这些信息提取到python数组中。
数组将获取位置0的日期,然后将temps存储在以下位置,如下所示:
temparray[0] = [20130102,34.75,34.66,34.6,34.6,....,34.86]
temparray[1] = [20130103,34.65,34.65,34.73,34.81,....,34.64]
这是我的尝试,但很糟糕:
from xlrd import *
print open_workbook('temp.xlsx')
wb = open_workbook('temp.xlsx')
for s in wb.sheets():
for row in range(s.nrows):
values = []
for col in range(s.ncols):
values.append(s.cell(row,col).value)
print(values[0])
print("%.2f" % values[1])
print'''
我使用了xlrd,但我愿意使用任何东西。谢谢你的帮助。
答案 0 :(得分:2)
根据我对你的问题的理解,问题在于你希望输出是一个列表列表,而你却没有得到这样的东西。
那是因为你的代码中没有任何东西甚至尝试来获得这样的东西。对于每一行,您构建一个列表,打印出该列表的第一个值,打印出该列表的第二个值,然后忘记该列表。
要将每个行列表附加到列表的大列表中,您所要做的就是将每个列值附加到行列表时所做的完全相同的事情:
temparray = []
for row in range(s.nrows):
values = []
for col in range(s.ncols):
values.append(s.cell(row,col).value)
temparray.append(values)
从您的评论中看,您实际想要的不仅仅是这个,而且还将白天的温度分组,并且只添加第二列,而不是所有值,每一天。这根本不是你在问题中描述的内容。在这种情况下,你根本不应该在列上循环。你想要的是这样的:
days = []
current_day, current_date = [], None
for row in range(s.nrows):
date = s.cell(row, 0)
if date != current_date:
current_day, current_date = [], date
days.append(current_day)
current_day.append(s.cell(row, 2))
此代码假定日期始终按排序顺序排列,因为它们位于输入屏幕截图中。
我可能会以不同的方式构造它,构建一个行迭代器以传递给itertools.groupby
,但我希望将其保持为新手友好,并尽可能接近原始代码。
另外,我怀疑你真的不想要这个:
[[date1, temp1a, temp1b, temp1c],
[date2, temp2a, temp2b]]
......而是这样的事情:
{date1: [temp1a, temp1b, temp1c],
date2: [temp1a, temp1b, temp1c]}
但是如果不知道您打算做这些信息,我无法告诉您如何最好地存储它。
答案 1 :(得分:1)
如果您希望保留相同日期的所有数据,我可能会建议使用字典来获取特定日期的临时列表。然后,一旦用数据初始化了dict,就可以重新排列你喜欢的方式。在wb=open_workbook('temp.xlsx')
之后尝试这样的事情:
tmpDict = {}
for s in wb.sheets():
for row in xrange(s.nrows):
try:
tmpDict[s.cell(row, 0)].append(s.cell(row, 2).value)
except KeyError:
tmpDict[s.cell(row, 0)] = [s.cell(row,2).value]
如果你打印tmpDict,你应该得到一个输出:
{date1: [temp1, temp2, temp3, ...],
date2: [temp1, temp2, temp3, ...]
...}
字典键以任意顺序保存(它与键的哈希值有关),但您可以根据字典的内容构建列表列表,如下所示:
tmpList = []
for key in sorted(tmpDict.keys):
valList = [key]
valList.extend(tmpDict[key])
tmpList.append(valList)
然后,您将获得按日期排序的列表列表,其中包含val,就像您最初的工作一样。但是,您始终可以使用键获取字典中的值。我通常发现之后使用数据更容易,但您可以将其更改为您需要的任何形式。