Python Pandas 2つのpyファイルの作業を一つのpyファイルに書いて続けて実行したい。
プログラミング自体 超初心者です。
以前こちらで、質問させていただき、
以下CSV
①
A B C D E
本 店 りんご
本 店 バナナ
本 店 みかん
本 店 いちご
芦屋店 バナナ
西宮店 りんご
西宮店 バナナ
尼崎店 りんご
三宮店 りんご
三宮店 バナナ
三宮店 みかん
を
②
A B C D E
本 店 りんご バナナ みかん いちご
芦屋店 バナナ
西宮店 りんご バナナ
三宮店 りんご バナナ みかん
に置き換えてCSVに書き出すpyファイルと、
別途、その②のCSVを呼び出して
③
店名(A) , 果物(B~E)
本 店, りんご
バナナ
みかん
いちご
芦屋店, バナナ
西宮店, りんご
バナナ
三宮店, りんご
バナナ
みかん
(③このサイトの使用上空白が左詰めでややこしいので、画像のようにエクセルでいうところの表記でA列にA(店名)B列にB~E列(果物)の文字列をセル内改行で結合したもので2列にする感じです)
に置き換えてCSVに書き出すpyファイルと、
それぞれ書き方をご指南いただきました。
import pandas as pd
・#↓↓①一枚目の.pyの処理
df = pd.read_csv('./test.csv') #test.csvが店名と果物のCSVファイル①
shopNameList = []
outputData = [['A', 'B', 'C', 'D', 'E']]
for index, row in df.iterrows():
shopName = row[0] productName = row[1] if shopName in shopNameList: outputData[shopNameList.index(shopName) + 1].append(productName) else: outputData.append([shopName, productName]) shopNameList.append(shopName)
・#ここまでが①一枚目の.pyの処理
pd.DataFrame(outputData).to_csv('./output.csv', header=False, index=False) #② ①の処理のCSV保存
・#import pandas as pd [2枚の時に書いていたimport宣言]
・#df = pd.read_csv('./output.csv') [2枚の時に書いていた呼び出し処理]
・#↓↓② ①の処理のCSV保存
tmp = pd.DataFrame({
'店名': outputData['A'],
'果物': outputData['B'].str.cat("\n" + outputData['C'], na_rep='').str.cat("\n" + outputData['D'], na_rep='').str.cat("\n" + outputData['E'], na_rep='')
})
tmp.to_csv('./output-left.csv', index=False) # ③ のCSV保存
そこで、この2枚のpyを続けて書いて、
①~③を1枚のファイルで動かして2枚のCSVを出力させたいのですがうまくいきません…
まず2枚のファイルを③のimport部分省略で単純に並べると
①~②の処理
②.csvをフォルダに保存
②.csvを呼び出して
②~③の処理
③.csvをフォルダに保存
で、もちろん問題なく処理できるのですが、
単純に②.csvを呼び出しを消したら
③.csvが①の段階で②の処理を飛ばして③の左詰め処理が行われた結果になりました。
A B
本 店 りんご
本 店 バナナ
本 店 みかん
本 店 いちご
芦屋店 バナナ
西宮店 りんご
西宮店 バナナ
尼崎店 りんご
三宮店 りんご
三宮店 バナナ
三宮店 みかん
のような形です。
tmp = pd.DataFrame({ 'A': df['A'],~
を
tmp = DataFrame(outputData)({ 'A': df['A'],~
や
tmp = ({ 'A': df['A'],~
に変えても
raise KeyError(key) from errKeyError: 'A'
というエラーがでます。
tmp = pd.DataFrame({
'A': outputData['A'],
'果物': outputData['B'].str.cat("\n" + outputData['C'], na_rep='').str.cat("\n" + outputData['D'], na_rep='').str.cat("\n" + outputData['E'], na_rep='')
})
に変えても
'A': outputData['A'],
TypeError: list indices must be integers or slices, not str
というエラーがでます。
エラーを見ても全然わからなくて
なんとなく、
tmp = pd.DataFrame({
は、outputDataの作業前のdfを呼び出してしまっていること、
tmp = pd.DataFrame(outputData)({
だとoutputDataの工程はリストだから呼び出しできませんみたいな内容のエラーにも見えたりで困ってしまいました。
これは一回一回読み込ませないと難しいのでしょうか…
それとも、一つ目のこの店名と果物で縦のCSVを横に並べ変えた処理結果を呼び出してそれに対して続けて左詰めにして改行する処理にする何か良い案はあるでしょうか?
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/11 05:40 編集
退会済みユーザー
2021/05/11 09:13
2021/05/11 12:33 編集
退会済みユーザー
2021/05/11 20:29
2021/05/12 00:17