お世話になります。
PythonのPandasのpivot tableで集計したデータを別のデータフレームに移そうと思っています。
下記のプログラムでopen_order_pivotのデータフレームからdf_outputにデータを移すことには成功しているのですが、
open_order_pivotはvalueをつかって「発注残」という項目を集計しています。
その結果、「発注残」という項目がColumnとして認識しておらず、df_outputというデータフレームに移行できませんでした。
open_order_pivotをprintすると、「発注残」という項目が確かにcolumnになっておらず、データを吸い出せませんでした。
open_order_pivotをエクセルに抽出すると、「発注残」という項目はcolumnとして入っていたので、
一度エクセルに出力して、再度そのエクセルから、df_open_order_pivotというデータフレームにいれてから
データを以降しているのですが、いちいちエクセルに出力することなくデータを移動することはできないでしょうか?
エラー画面はこちらです。
練習用に作っているダミーデータは下記のようなエクセルです。
アドバイスいただけますと幸いです。
最終的に完成させたいデータは下記のようなものです。
*dummy1 dummy2の箇所は別のデータベースから持ってくる予定ですが、ここではまだ抽出してないのでNaNとなっています。
↓失敗したプログラム(一番したにうまくいったプログラムをいれていますが、コメントアウトだけ違います)
python
1import os,sys 2import shutil 3import openpyxl 4import xlrd 5from pprint import pprint 6import pandas as pd 7#============================================================================ 8# ファイルの読み込み 9TEST_DIR = "pivot_table.xlsx" 10book = openpyxl.load_workbook(TEST_DIR) #ファイルの展開 11sheet_name = book.sheetnames #シートの名前取得 12 13#pandas でエクセルを取り込む 14df_open_order = pd.read_excel(TEST_DIR,sheet_name[0]) #ファイルの展開 15 16#取り込んだデータをピボットテーブルする 17open_order_pivot = pd.pivot_table(data=df_open_order, 18 values=['発注残'], 19 index=['注文番号','部材','単価','発注数量'], 20 aggfunc='sum', 21 margins=True,margins_name='合計') 22print(open_order_pivot) 23 24#ピボットテーブルをエクセルに書き出す 25#open_order_pivot.to_excel('temp.xlsx', sheet_name='sheet0') 26#df_open_order_pivot = pd.read_excel('temp.xlsx','sheet0') 27 28df_output_cols = ['注文番号','部材','単価','発注数量','発注残','dummy1','dummy2'] 29df_output = pd.DataFrame(index=[], columns=df_output_cols) 30 31#ピボットからoutputに列をコピー 32df_output.loc[:,'注文番号'] = open_order_pivot.loc[:,'注文番号'] 33df_output.loc[:,'部材'] = open_order_pivot.loc[:,'部材'] 34df_output.loc[:,'単価'] = open_order_pivot.loc[:,'単価'] 35df_output.loc[:,'発注数量'] = open_order_pivot.loc[:,'発注数量'] 36df_output.loc[:,'発注残'] = open_order_pivot.loc[:,'発注残'] 37 38#df_output.loc[:,'注文番号'] = df_open_order_pivot.loc[:,'注文番号'] 39#df_output.loc[:,'部材'] = df_open_order_pivot.loc[:,'部材'] 40#df_output.loc[:,'単価'] = df_open_order_pivot.loc[:,'単価'] 41#df_output.loc[:,'発注数量'] = df_open_order_pivot.loc[:,'発注数量'] 42#df_output.loc[:,'発注残'] = df_open_order_pivot.loc[:,'発注残'] 43 44 45print(df_output) 46
↓うまくいったプログラム
python
1import os,sys 2import shutil 3import openpyxl 4import xlrd 5from pprint import pprint 6import pandas as pd 7#============================================================================ 8# ファイルの読み込み 9TEST_DIR = "pivot_table.xlsx" 10book = openpyxl.load_workbook(TEST_DIR) #ファイルの展開 11sheet_name = book.sheetnames #シートの名前取得 12 13#pandas でエクセルを取り込む 14df_open_order = pd.read_excel(TEST_DIR,sheet_name[0]) #ファイルの展開 15 16#取り込んだデータをピボットテーブルする 17open_order_pivot = pd.pivot_table(data=df_open_order, 18 values=['発注残'], 19 index=['注文番号','部材','単価','発注数量'], 20 aggfunc='sum', 21 margins=True,margins_name='合計') 22print(open_order_pivot) 23 24#ピボットテーブルをエクセルに書き出す 25open_order_pivot.to_excel('temp.xlsx', sheet_name='sheet0') 26df_open_order_pivot = pd.read_excel('temp.xlsx','sheet0') 27 28df_output_cols = ['注文番号','部材','単価','発注数量','発注残','dummy1','dummy2'] 29df_output = pd.DataFrame(index=[], columns=df_output_cols) 30 31#ピボットからoutputに列をコピー 32#df_output.loc[:,'注文番号'] = open_order_pivot.loc[:,'注文番号'] 33#df_output.loc[:,'部材'] = open_order_pivot.loc[:,'部材'] 34#df_output.loc[:,'単価'] = open_order_pivot.loc[:,'単価'] 35#df_output.loc[:,'発注数量'] = open_order_pivot.loc[:,'発注数量'] 36#df_output.loc[:,'発注残'] = open_order_pivot.loc[:,'発注残'] 37 38df_output.loc[:,'注文番号'] = df_open_order_pivot.loc[:,'注文番号'] 39df_output.loc[:,'部材'] = df_open_order_pivot.loc[:,'部材'] 40df_output.loc[:,'単価'] = df_open_order_pivot.loc[:,'単価'] 41df_output.loc[:,'発注数量'] = df_open_order_pivot.loc[:,'発注数量'] 42df_output.loc[:,'発注残'] = df_open_order_pivot.loc[:,'発注残'] 43 44 45print(df_output)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。