使用Python读取.xls文件时的数据分析

时间:2015-06-17 14:20:24

标签: python excel

我正在使用Python进行数据分析项目。我有一个.xls文件,我需要阅读并从每一行获取某些信息。我正在使用xlrd。

当我在记事本中打开文件时,前十行是关于文件包含内容的注释,然后我得到实际数据。如何跳过以“#”开头的所有行?

此外,一旦我到达行,我想遍历每一行并分离每行的每一列中的元素,并将其添加到每列的字典中。如何根据列分隔每行中的数据?

截至目前,这是我的代码:

    peaksheets = peakfile.sheet_by_name("Sheet1")
    num_rows = peaksheets.nrows -1
    curr_row = -1
    while curr_row < num_rows:
            curr_row +=1
            row = str(peaksheet.row(curr_row))
            words = row.strip().split('\t')
            c = words[0]
            s = int(words[1])

运行代码时,我也遇到以下错误:

xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found '# This f'

这就是为什么我想跳过以“#”符号开头的行。

3 个答案:

答案 0 :(得分:1)

尝试使用pandas将文件读取到数据帧。如果您确实需要字典中的数据,可以将其传递给数据框中的数据。

background-image

答案 1 :(得分:0)

这个怎么样?

peaksheets = peakfile.sheet_by_name("Sheet1")
dict_data = {}
num_rows = peaksheets.nrows -1
curr_row = -1
while curr_row < num_rows:
        curr_row +=1
        # we want to skip the comments
        if row.startswith('#'):
            continue
        row = str(peaksheet.row(curr_row))
        words = row.strip().split('\t')
        for i in range(len(words)):
            dict_data[curr_row][i] = words[i]
        c = words[0]
        s = int(words[1])

答案 2 :(得分:0)

如果前10行是您不想要的,那么您可以随时在10开始curr_row。至于您的词典,请尝试以下操作:

headers=[(names of the columns to use as keys for your dict)]
dict_list=[]
col_list=[None]*len(headers)    
for curr_row in range(10, peaksheets.nrows):
    for curr_cell in range(peaksheets.ncols):
        cell_value = str(peaksheets.cell(curr_row, curr_cell).value)
        col_list[curr_row].append(cell_value)

for head_name in headers:
    dict_list[head_name]=col_list[headers.index(head_name)]

要记住的一些事项:

  1. 此代码假定您需要每列
  2. 这要求您按照列中显示的列的顺序构建headers列表
  3. 这应该是您while循环的替代。
  4. 如果有更多评论,您可以检查该行的第一个元素是否为&#39;#&#39;并忽略它。