使用環境
- OS:Windows 10 Pro(バージョン:20H2)
- 言語:Python(pandas、openpyxl使用)
経緯
Pythonを使い、pandasで抽出したデータをopenpyxl経由でExcelに貼り付けようとしたところ、
次のエラーが発生しました。
ValueError: Cannot convert ('木',) to Excel
データを確認すると、
**「木」「林」「森」「4」「8」「12」**と並ぶ表があり、
1行目にカラム、2行目にデータが存在している構成でした。
このエラーへの対処と、より良いやり方を整理しました。
エラー原因
今回のエラーは、
セルに渡そうとした値が文字列ではなく、タプル型(tuple)になっていたために発生しています。
openpyxlでは、
文字列型(str)、数値型(int、float)、日付型(datetime)などのシンプルな型しか、セルに書き込むことができません。
タプルやリストなどの複合型をそのまま渡すとエラーになります。
あなたが採った応急処置方法(正しいアプローチ)
- 一旦データをすべて数値に変換してから貼り付ける
- その後、カラム名(木・林・森)を個別に手動で設定する
これは確かに実用的で正しいやり方です。
しかし、もっとスマートにエラーを防ぎながらデータを貼り付ける方法も存在します。
根本的な対処法:タプルを文字列に変換してから貼り付ける
タプルをセルに渡す直前で文字列に変換してしまえば、
エラーなく処理できます。
改善版コード
import openpyxl
from openpyxl.utils.dataframe import dataframe_to_rows
# ワークブックとシート作成
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "sheet1"
# データフレームを行ごとに取得
rows = dataframe_to_rows(data, index=False, header=True)
row_start = 1
col_start = 1
for row_no, row in enumerate(rows, row_start):
for col_no, value in enumerate(row, col_start):
# タプル型なら文字列に変換
if isinstance(value, tuple):
value = "".join(map(str, value))
ws.cell(row=row_no, column=col_no).value = value
ポイント解説
- **
isinstance(value, tuple)
**で、タプルかどうか判定します。 - タプルなら、**
"".join(map(str, value))
**で中身を結合して文字列化します。 - これにより、「(‘木’,)」のようなデータでも「木」という単純な文字列として書き込めるようになります。
補足:なぜタプルになったのか?
もともとのDataFrameで、
- 複数列まとめて1セルに格納しようとした
- あるいは何らかの加工時にタプルになってしまった
といった背景が考えられます。
特に、SQL抽出や結合処理後にタプル化するケースがよくあります。
まとめ
PythonでValueError: Cannot convert (‘木’,) to Excelが発生した場合は、
- セルに渡す前にデータ型を確認する
- タプル型の場合、文字列に変換してから書き込む
- 根本対策として、データ準備段階で型を整えるのも有効
これらを意識することで、
エラーなくスムーズにExcelファイル出力が可能になります。
ここまでお読みいただき、誠にありがとうございました。
スクールの紹介
最後に宣伝をさせてください。
技術で未来を切り拓く―あなたの夢を現実にするプログラミングスクール
Webデザインやプログラミングで成功を目指している方々にとって、このオンラインスクールは夢を叶えるための最適な場所です。皆さんのキャリアを次の段階へと引き上げるためにデザインされたこのスクールは、一人ひとりの成功を心から願い、それを実現するための全てを提供しています。ここでは、このスクールの魅力について詳しくご紹介します。
◆圧倒的な費用対効果
このオンラインプログラミングスクールは、Web系教育において最高の費用対効果を提供しています。多くの高額スクールが存在する中で、ここではリーズナブルな価格で、質の高い教材、無限のサポート、そして実際に市場で求められるスキルの習得機会を提供しています。
◆現役フリーランスの講師陣
講師たちは全員、現役のフリーランスプロフェッショナルです。市場で活躍している講師から直接、最新のトレンドや実践的なスキルを学べるのは、このスクールの大きな特徴です。
◆柔軟な学習コース
固定のコースがなく、学習者の興味やニーズに応じて自由に学習できます。進路変更も自由で、最低契約期間は1ヶ月という柔軟性を持っています。自分のペースで、自分に合った学習が可能です。
◆無制限の添削とサポート
理解できるまで、そして満足するまで、無制限に添削と質問への回答を提供しています。進路相談や技術面以外の相談にも対応しており、全面的にサポートします。
◆社長から学べる貴重な機会
デザイナー、プログラマー、ディレクター、マーケターとして豊富な経験を持つ社長から直接学べるのも、このスクールの特別な点です。他のスクールでは得られない、貴重な機会です。
◆実績作りへの徹底的なサポート
就職、転職、フリーランスとして成功するためには、高品質な実績が必要です。生徒の作品レベルを最大限に高め、市場で求められる実績を作り上げることに力を入れています。案件を取得できない生徒には、直接案件を提供することもあります。
◆メッセージからの約束
高額な授業料を支払わせて結果を出せないスクールとは違い、物理的なサポートは提供できないかもしれませんが、継続的な努力を通じて最高の結果を出せるようにサポートします。一緒に不正なスクールを撲滅し、あなたの夢を実現しましょう。
このプログラミングスクールは、Webデザインやプログラミングでの成功を目指す方々に必要な全てを備えています。今こそ、このコミュニティに参加し、あなたのキャリアを加速させる時です。
詳しくはこちら↓