繁体   English   中英

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

[英]Data Analysis when Reading a .xls File using Python

我正在使用 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'

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

尝试使用 pandas 将文件读取到数据帧。 如果你真的需要字典中的数据,你可以将它从数据框中传递给一个。

import pandas as pd
df = pd.read_excel('file.xls', 'Sheet1', skiprows=range(10))
datadict = df.to_dict(orient='dict')

那这个呢?

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])

如果前 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. 如果注释较多,可以检查该行的第一个元素是否为'#',并忽略它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM