2017-12-07 15 views
0

ロードされたExcelシートにリストを書き込んだり、その結果をxlsxとして保存するには、いくつかの問題があります。私のコードでは、作成したリストを読み込んで、ロードブックの特定の列に配置します。私はおそらく、データフレームを使ってこれを行う簡単な方法があると思いますが、私は方法がわかりません。理想的には、ロードしたワークブックの書式を保存したいと考えています。リストを新しいExcelに書き込むxlsx with dataframes

col_test = [1L, 2L, 3L, 4L, 5L] 

私のコードは、エラーがPythonがcellの定義にrowという名前のパラメータを見つけることができなかったことを意味し、この

import xlrt 
from xlrd import open_workbook 
rb = open_workbook("Excel FDT Master_01_update.xlsx") 
s = rb.sheet_by_name('INPUT') 
r = 5 
for test in col_test: 
    s.cell(row = r, column = 1).value = test 
    r += 1 
rb.save('didthiswork.xlsx') 

答えて

0

です。私が間違っていないなら、これはxlrdモジュールです。ここで呼び出そうとしているSheet.cell()のAPIドキュメントを見てみましょう。

cell(rowx, colx) 

所与の行と列のセルオブジェクト。

パラメータの誤った名前を付けたようです。行を次のように変更するとこれを修正する必要があります。

s.cell(rowx = r, colx = 1).value = test 

それはあなたがそれがないことを確認しているとき、ここではパラメータ名のように、確認して存在しない何かについてエラーが出るたびPythonはそう、あなたがタイプに何を意味するのかに関して、推測を作ることができないことは言うまでもないですドキュメントを読んで、タイプミスを確認してください。また、今後、関数定義や使用しているモジュールの名前など、関連するすべての情報を投稿してください。

0

ここには、anacondaの上に特別なインストールがない1つのバージョンがあります。 それはスタイリングを維持していませんが、元のxlsxにコピー/ 'paste values'で修正することができます。

ほとんどのExcelマニピュレータは、元のファイルをそのまま維持することに問題があります。それにも方法がありますが、防水にしたいのであれば、基本的には特定のソリューションで終わるか、そこにすべてのライブラリをコード化することになるので、それは価値がありません。

パンダは既存のデータフレームを拡張するにはちょっと難しいかもしれませんが、それを行うにはいくつかの方法があります。ここではassignを使っているので、データフレームの行数が何を追加するのに十分な長さであることを確認する必要があります。

import pandas as pd 

# read the excel 
df = pd.read_excel('Geen titel 1.xlsx') # there are options to choose sheet 
print('original df') 
print(df) 
# your data is not valid python syntax so let's assume it's strings 
col_test = ['1L', '2L', '3L', '4L', '5L'] 
new_idx = range(max(len(col_test), len(df.index))) 
df = df.reindex(new_idx) # now it will accommodate different lengths 
print('reindexed df') 
print(df) 
df = df.assign(new_col=col_test) # new column added at right side 
print('modified df') 
print(df) 
df.to_excel('the_new.xlsx') 

印刷物:そのNEW_COLUMNカラムを置き換える代わりに、新しいとして追加され、それが特定の行に書き込みを開始することができ、より具体的にので

original df 
    a b 
0 1 c 
1 2 d 
2 3 e 
reindexed df 
    a b 
0 1.0 c 
1 2.0 d 
2 3.0 e 
3 NaN NaN 
4 NaN NaN 
modified df 
    a b new_col 
0 1.0 c  1L 
1 2.0 d  2L 
2 3.0 e  3L 
3 NaN NaN  4L 
4 NaN NaN  5L 
+0

、これは変更することができる方法はあります、行6と言う? – boulderj

+0

あなたは任意の列に割り当てることができるので、 'df.assign(a = col_test)'はそれを行います。私はあなたがパンダに関する多くのチュートリアルの1つを行うことをお勧めします。ドキュメンテーションは、選択/索引付けの良い例、またはジュピターのノートブック、または人々が基礎を踏襲するYouTubeのビデオを保持します。特定の行でそれを実行する場合は、dfの一部を事前に選択してそれらの値を置き換えることができますが、それは少し異なります。 dfの既存のサイズ/シェイプ内の値のみを置き換えることができます。追加するものが拡張されている場合は、最初にサイズ/シェイプを増やす必要があります。 – ahed87

+0

または最初に 'none'をあなたのcol_testに追加してください。これは、行を下にシフトするのと同じです。上書きされますが、' None'の代わりにオリジナルのdfから元の値を取り出してput Python/pandasに慣れていないと考えれば、おそらくあなたの方が簡単でしょう。 – ahed87

関連する問題