質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

2回答

5007閲覧

python pandasで出力した値をexcelの指定したセルに入れる方法が分かりません

madcaptain

総合スコア1

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2021/02/15 12:12

編集2021/02/15 23:40

実現したいこと

既存のCSVファイルの特定の列を取得し、その列の合計を算出。合計の値を、既存のexcelファイルの指定したセルに代入したいのです。

問題点

書いたコードを実行すると、既存のexcelファイルが上書きされてしまいます。既存のExcelファイルデータをそのままに、指定したセルに代入したいです。

コード

import openpyxl
import csv
import pandas as pd

f=pd.read_csv("C:\Users***\Documents\money\money_py\2021_01.csv",header=0,usecols=[4],encoding="utf-8")

j = f.sum()

j.to_excel("C:\Users***\Documents\money\money_py\2021_02.xlsx", startrow=9, startcol=4,index=False,header=False)

コードの結果

CSVファイルの列を取得
イメージ説明

既存のExcelファイルの指定したセルに代入
イメージ説明

上書きされ他のデータが消えてしまいます
イメージ説明

ここで他のデータを残したまま、代入したいです。

他に試したこと・コード

openpyxlでExcelを開いて、保存してみる。

f =fd.read_csv("C:\Users***\Documents\money\money_py\2021_01.csv",header=0,usecols=[4],encoding="utf-8")

j = f.sum()
wb = openpyxl.load_workbook("C:\Users***\Documents\money\money_py\2021_02.xlsx")
ws = wb.worksheets[0]
c1 = ws["E10"]
c1.value = j
print(c1.value)

typeエラーが発生。pandasのtypeと合わない?
ValueError: Cannot convert 利用金額 182743.0
dtype: float64 to Excel

どうか実現のためご教授お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

何とか解決しました。

import openpyxl
import csv

with open("C:\Users***\Documents\money\money_py\2021_01.csv", encoding="utf-8") as f:
reader = csv.reader(f)
header = next(reader)
sum_row = 0
s = [int(row[4]) for row in reader if row[4] != '']
for v in s:
sum_row += v

wd = openpyxl.load_workbook("C:\Users*\Documents\money\money_py\2021_02.xlsx")
ws = wd.worksheets[0]
ws.cell(10,5).value = sum_row
wd.save("C:\Users*
\Documents\money\money_py\2021_02.xlsx")

投稿2021/02/18 11:59

madcaptain

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

headerを読み込まないで、処理すればよいかと思います。
header=1を指定した場合と、指定しない場合でのj = f.sum()の値を確認してみましょう。

f =fd.read_csv("C:\Users\***\Documents\money\money_py\2021_01.csv",header=1,usecols=[4],encoding="utf-8") j = f.sum() print(j)

workbookで開いている処理と、to_exelで新規に書き込む処理が続いています。
to_excelの行を削除して、
workbookを保存する処理を追加すればOKです。

# workbookを開いています。これを保存する処理を追加します。 wb.save(FILENAME) # workbookを閉じる処理は不要かもしれません。 #wb.close()

FILENAMEは適切に設定してください。

投稿2021/02/15 13:01

編集2021/02/15 23:55
phoepsilonix

総合スコア233

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

madcaptain

2021/02/15 23:42

ご返答ありがとうございます。大変申し訳ございません、最初に記載したコードが間違っておりました。再投稿しましたので、よろしくお願いいたします。
phoepsilonix

2021/02/15 23:56

編集して、回答しました。ご参考になれば幸いです。
madcaptain

2021/02/16 12:29

編集後のご回答ありがとうございました。実行しましたが、既存のExcelファイルは上書きされてしまいました。もう少し調べてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問