对于Python (和StackOverflow!)来说,如果有任何帮助,我们将不胜感激。
我正在尝试遍历excel电子表格中的列,并确定哪一列包含最多的日期条目。
问题似乎出在Excel电子表格中的格式设置上。我的excel文件中的日期被列为yyyy-mm-dd,但模块似乎将它们解释为整数,例如2012-10-12 = 1990。同样,日期3/1/2014被解释为3除以1除以2014 = 0.00149。
到目前为止,我一直在使用Python中的xlrd模块来计算特定列中的日期数量。我尝试过.xls和.xlsx,也尝试过formatting_info=True,但没有成功。
下面是我尝试使用的一个函数的代码...
import xlrd
from xlrd import open_workbook
from xlrd import XL_CELL_DATE
def find_maturity_date_column2(file, threshold):
wb = open_workbook(file)
sheet_index = 0
max_sheet_score = 0
max_col_score = 0
maturity_sheet_index = 0
maturity_col_index = 0
for a in wb.sheets():
current_sheet = wb.sheet_by_index(sheet_index)
sheet_score = 0
for column in range(0,a.ncols):
col_score = 0
for row in range(0,a.nrows):
if current_sheet.cell(row,column).ctype == xlrd.XL_CELL_DATE:
sheet_score = sheet_score + 1
col_score = col_score + 1
else:
sheet_score = sheet_score
col_score = col_score
if sheet_score >= max_sheet_score and col_score > max_col_score:
max_col_score = col_score
max_sheet_score = sheet_score
maturity_sheet_index = sheet_index
maturity_col_index = column
else:
max_col_score = max_col_score
max_sheet_score = max_sheet_score
maturity_sheet_index = maturity_sheet_index
maturity_col_index = maturity_col_index
sheet_index = sheet_index + 1
if max_col_score < threshold:
maturity_sheet_index = "None Found"
maturity_col_index = "None Found"
else:
maturity_sheet_index = maturity_sheet_index
maturity_col_index = maturity_col_index
return maturity_sheet_index, maturity_col_index这段代码没有产生任何成功。你有什么办法让我解决这个问题吗?也许除了xlrd之外,还有其他方法?
谢谢!
更新:以下是文件输入的示例...( csv格式)
Tranche,Maturity Date,Country,Currency,Initial Spread
Term Loan B,2020-10-12,USA,USD,0.025
Term Loan B,2020-11-02,USA,USD,0.0275
Term Loan B,2020-05-22,USA,USD,0.0275如何构建一个流程来识别column =1是具有最多日期的列(当模块将第1列的值解释为整数而不是日期时)
发布于 2014-08-30 04:32:37
我认为在决定它是否是日期-时间之前,您没有查看单元格的类型。
if current_sheet.cell(row,column) == xlrd.XL_CELL_DATE:应更改为
if current_sheet.cell(row,column).ctype == xlrd.XL_CELL_DATE:发布于 2014-08-30 06:04:09
我不得不在这里打破Stack Overflow协议,并提供一个“答案”,即使这个问题真正需要的是更尖锐的评论和编辑(或者更好的是,聊天室)。现有的评论序列已经太长了。
怀疑文件中的“日期”由于格式不正确(也就是说,它们在任何Excel意义上都不是日期)而没有被xlrd检测为日期,这种怀疑是很好的。所以问题仍然存在:它们是什么?
我们至少可以从两个角度着手:报告xlrd告诉我们的信息,或者报告Excel告诉我们的信息。(是的,我们还可以做其他事情,但老实说,xlrd是一个非常优秀的Excel阅读器,我们不应该使用其他任何东西。)
现在,我确信xlrd不会将任何单元格解释为“具有整数输出的公式”。xlrd不知道也不关心公式,而且从数据存储的角度来看,没有Excel整数这样的东西。( Excel中的每个数字都是一个浮点数。某些函数可能恰好具有与整数相等的值。但是他们的数据类型是浮点型。这包括Excel可能认为是日期的任何内容。)
那么,在Excel方面:单元格是什么样子的?屏幕截图是比CSV更好的支持文档,因为在写入CSV时会丢失大量信息(以至于将CSV重新加载到Excel中通常会得到与开始时不同的结果)。单元格的格式字符串是什么?(从Excel中,导航菜单,就像您要手动更改格式一样,选择自定义选项,它应该显示现有的格式字符串,可以是类似于0.00或#,##0.00或m/d/yyyy或@等的内容。)
在xlrd方面,有问题的单元的ctype和value是什么?不只是打印值,而是使用repr函数打印表示。例如,
print current_sheet.cell(row,column).ctype
print repr(current_sheet.cell(row,column).value)提供此信息(编辑您的问题或对此答案发表评论),也许我们会取得一些进展。
顺便说一句,你的代码绝对不像它应该的那样简洁。有很多行根本不做任何事情。我明白了,你还是个新人,这很好。尽管如此,代码似乎确实可以处理给定的CSV数据(因为如果您将该CSV加载到Excel中,它将把看起来像日期的内容解释为日期)。
https://stackoverflow.com/questions/25574381
复制相似问题