2017-06-12 8 views
3

xlsタイプのファイルには9列あり、行数が異なります。私はxlrdや他のモジュールを使って9列のうちの1列目と2列目のすべての値を抽出し、抽出した値を個別に使うことができます。これまでのところ私のコードは次のようになります。Pythonを使用した選択的な列と行の解析

import xlrd 
    import openpyxl 

    workbook = xlrd.open_workbook('C09.xls') 

    sheet_names = workbook.sheet_names() 


    sheet = workbook.sheet_by_name(sheet_names[0]) 

    num_rows = sheet.nrows 
    num_cols = sheet.ncols 

    plist = [[0 for x in range(3)] for x in range(num_rows)] 

    for i in range(num_rows): 
     for j in range(3): 
      plist[i][j] = sheet.cell(i,j).value 

してから、次に[J]から対応する値を引っ張って(例えば乗算やその他もろもろをやっなど)[I]の値を使用してください。

上記のコードは次のように出力できます:

[['Col header 1', 'Col header 2', 'Col header 3'], [1.0, 1000, 2000], [2.0, 1001, 2001], ..... so on] 

をそう簡単な方法はありますか?私はPythonの初心者ですので、少し具体的であれば分かります。どうもありがとうございます!

+1

「xlrd」を使用する理由はありますか? mungingやwranglingのデータには、 'pandas'よりも簡単なライブラリはほとんどありません。 [read_excel](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_excel.html)メソッドを確認してください。パンダの素晴らしいイントロはこの本です。(http://nbviewer.jupyter.org/github/jakevdp/PythonDataScienceHandbook/blob/master/notebooks/Index.ipynb) –

+0

あなたのお薦めと本をありがとうございます。私はいくつかのスタック検索を行い、xlrdについて見つけました。 –

答えて

1

フィードバック/改善:

スニペットでは、初期化部分が冗長です。これは二重の繰り返しを避ける:

plist = [[sheet.cell(i,j).value for j in range(3)] for i in xrange(num_rows)]

あなたはNone値に実行する必要があり、あなたがそれらを正規化することができます

plist = [[sheet.cell(i,j).value or 0 for j in range(3)] for i in xrange(num_rows)] 

最後に、ここでは0・初期化を行うための、よりPython的な方法です。

plist = [x[:] for x in [[0] * 3] * sheet.nrows

+1

は 'plist = [[0] * 3] * sheet.nrows'に注意してください:' plist [0] [0] = 1'が何をするかを確認してください –

関連する問題