web-dev-qa-db-ja.com

Python Pandas-Excelシートの特定の列に書き込む方法

pandasに新しい値を書き込むことでExcelシートを更新するのに問題があります。MySheet1.xlsxから値を読み取る既存のフレームdf1が既にあるので、これは新しい必要があります。データフレームまたは何らかの方法で既存のものをコピーして上書きします。

スプレッドシートは次の形式です。

enter image description here

python list:values_list = [12.34、17.56、12.45]。私の目標は、Col_Cヘッダーの下にリスト値を垂直に挿入することです。現在、データフレーム全体を水平に上書きし、現在の値。

df2 = pd.DataFrame({'Col_C': values_list})
writer = pd.ExcelWriter('excelfile.xlsx', engine='xlsxwriter')
df2.to_Excel(writer, sheet_name='MySheet1')
workbook  = writer.book
worksheet = writer.sheets['MySheet1']

この最終結果を取得する方法は?ありがとうございました!

enter image description here

6
kokodee

以下に、pandasとopenpyxlモジュール (Openpyxl Docs)) を使用して既存の.xlsxブックを変更する方法の完全に再現可能な例を示しました。

最初に、デモンストレーションのために、test.xlsxというブックを作成します。

from openpyxl import load_workbook
import pandas as pd
writer = pd.ExcelWriter('test.xlsx', engine='openpyxl') 
wb  = writer.book
df = pd.DataFrame({'Col_A': [1,2,3,4],
                  'Col_B': [5,6,7,8],
                  'Col_C': [0,0,0,0],
                  'Col_D': [13,14,15,16]})

df.to_Excel(writer, index=False)
wb.save('test.xlsx')

これは、この時点で予想される出力です。

Expected Output after first section of code

この2番目の部分では、既存のワークブック( 'test.xlsx')を読み込み、3番目の列を異なるデータで変更します。

from openpyxl import load_workbook
import pandas as pd
df_new = pd.DataFrame({'Col_C': [9, 10, 11, 12]})
wb = load_workbook('test.xlsx')

ws = wb['Sheet1']

for index, row in df_new.iterrows():
    cell = 'C%d'  % (index + 2)
    ws[cell] = row[0]

wb.save('test.xlsx')

これは最後に期待される出力です:

enter image description here

6
patrickjlong1

私の意見では、最も簡単な解決策は、Excelをパンダのデータフレームとして読み取り、それを変更してExcelとして書き出すことです。たとえば、次のとおりです。

コメント:

Import pandas aspd。Excelシートをpandas data-frame called。目的の列(長さが同じであることを確認してください)Excelとしてデータフレームを保存し、古いExcelを上書きするか、新しいExcelを作成します。

コード:

import pandas as pd;
ExcelDataInPandasDataFrame = pd.read_Excel("./YourExcel.xlsx");
YourDataInAList = [12.34,17.56,12.45];
ExcelDataInPandasDataFrame ["Col_C"] = YourDataInAList ;
ExcelDataInPandasDataFrame .to_Excel("./YourNewExcel.xlsx",index=False);
3
Elmspace