いつも通りExcelでCSVデータを作成しました。業務用のファイルをPythonのpandasで読み込みます。そして集計しようとしたときのことです。合計金額を出そうと意気揚々とコードを書きました。しかしなぜか数字が正しく計算されません。文字として繋がってしまう現象に直面したのです。「100」と「200」を足すとします。本来なら「300」になってほしいところです。しかし「100200」という文字列になりました。
実はpandasでCSVを読み込むと厄介なことが起きます。数字の列でも特定の条件で「object型」に変わるのです。これは文字列のような扱いになってしまう現象です。これに気づかずに計算を進めるのは大変危険な行為と言えます。集計結果がめちゃくちゃになるからです。そのままでは業務に支障が出てしまうでしょう。そこで慌てて型を変換しようと試みました。「astype(int)」を使ってみたのです。ところが今度は見たこともない英語のエラーが出ます。完全に手が止まってしまいました。
今回は非エンジニアの私が実際に経験した問題を扱います。「pandasで数値変換ができない問題」の解決策です。なぜエラーが出るのかという理由から説明しましょう。無理やり変換を通すための便利な関数も紹介します。この記事を読めば同じ問題に当たったときの対処法が分かります。
合計値異常の真相 object型の落とし穴
まず私が直面した最初の違和感から振り返ってみましょう。それはデータの合計値が明らかにおかしいことでした。前月の売上集計をpandasで読み込みました。いつものように合計を出そうとしたのです。すると出力された数値が数兆円規模になっていました。驚いてデータの中身を確認してみます。数値として計算されているわけではありません。文字列として横に連結されている状態でした。
そこでデータフレームの状態を確認することにしました。「df.info()」というコマンドを実行してみます。本来なら金額の列は整数や浮動小数点になるはずです。しかしすべて「object」と表示されていました。この「object型」というのは厄介な存在です。pandasの世界では主に文字列を指します。コンピュータは私の大事な売上データを誤解していました。数字ではなく単なる文字の羅列として認識していたのです。
pandasの罠、CSV型変換ミスで売上爆増
経理システムのCSVを読み込んだときのことです。金額列がobject型になっていることに気づきませんでした。そのままsum関数を使ってしまったのです。結果として文字列が数千行分も連結される事態になります。謎の長い数字が出力されて驚きました。一瞬だけ会社の売上が爆増したのかと錯覚したほどです。しかしすぐに型変換のミスだと気づきます。自分の知識不足に顔が熱くなりました。
実はpandasの「read_csv」には少し癖があります。

データ型変換エラー!見えない文字の罠
次に私は型が違うなら変換すればいいだけだと考えます。インターネットで調べた「astype(int)」を試しました。しかし実行した瞬間に画面の様子が変わりました。真っ赤なエラーメッセージで埋め尽くされたのです。表示されたのは「ValueError」という文字でした。値が不適切であることを示すエラーです。
なぜ数字に見えるデータなのに変換できないのでしょうか。どうやら空白やカンマが混入していることが原因でした。人間にとっては「1,000」も「1000」も同じ数字です。しかしコンピュータにとっては全く別物として扱われます。全角の数字や末尾の空白文字も同様に要注意です。
目視の限界、Pythonでエラー特定
エラーの原因を探るために奮闘しました。10万行あるCSVをExcelで開き直したのです。フィルタ機能で変な文字を探してみました。しかし目視では全く見つかりません。結局Pythonに戻ってエラー箇所を特定することにしました。そのためのコードを書く羽目になったのです。最初からコンピュータの力を借りればよいだけの話でした。
ここで一度立ち止まって考えてみてください
Pythonや自動化スキルを体系的に習得して、ITエンジニアとしてのキャリアを切り開きたい方には「Enjoy Tech!(エンジョイテック)」が選択肢のひとつです。現役エンジニアのサポートで、未経験から実践的なスキルを身につけられます。
データノイズの発見と対処法
そこでエラーの原因となっている犯人を特定しましょう。列の中にどんな値が含まれているのかを調査します。ここで役に立つのが「unique()」というメソッドです。これを使うと重複を除いた値の一覧を表示できます。数万行のデータがあっても種類ごとにまとめてくれるのです。何が混じっているのかが一目瞭然になりますね。
実際に試してみると驚くべき結果が出ました。数字のリストの中に異物が紛れ込んでいたのです。ポツンとハイフンや欠損という文字が含まれていました。さらには全角のスペースまで見つかったのです。これらは前任者が手入力した際の名残かもしれません。システムから出力される際の設定ミスの可能性もあります。こうしたノイズが一つあるだけで致命的です。それだけで変換処理はストップしてしまいます。
![日本語の文字が含まれるVS Codeの画面です。df['金額'].unique(](https://corenica-lab.com/wp-content/uploads/2026/06/pandas-unique-value-check.webp)
値の出現回数からノイズ把握
また値の出現回数を数えるメソッドも存在します。「value_counts()」は非常に強力な味方です。これを使えばノイズが何件含まれているのか分かります。具体的な数値で状況を把握できるのです。たとえばハイフンが1件だけなら手動で直せますよね。しかし1,000件もあるなら方針を変える必要があります。プログラムで一括処理する計画を立てられるでしょう。
自分の場合はユニーク値が18種類出てきました。そのうち「不明」「-」「(空白)」の3種類が数値変換を邪魔していたのです。
このようにいきなり変換を試みるのは避けましょう。
非エンジニアを救う魔法の呪文 pd.to_numeric
原因が分かったところで次はいよいよ解決策を実行します。私が辿り着いた最強の武器を紹介しましょう。pandasの「pd.to_numeric」という関数です。これには非常に便利なオプションが存在します。「errors=’coerce’」と指定してみてください。これこそが非エンジニアの私たちを救う魔法の呪文です。
このオプションを指定すると、処理の流れが大きく変わるのです。数値に変換できない文字が見つかったとしましょう。通常ならエラーで処理を止めてしまいます。しかしこのオプションはその部分を強制的に置き換える仕様です。「NaN(非数)」という空っぽの状態にしてくれるのです。つまり多少データが汚れていても問題ありません。止まることなく最後まで変換を走り抜けてくれます。
pd.to_numeric:数値変換の救世主
pd.to_numericを初めて使ったときのことです。あれほど苦戦していた変換が一瞬で終わりました。そのことに深く感動したのを覚えています。画面が赤く染まる恐怖からようやく解放されました。そこから集計作業がスムーズに進み始めたのです。パソコンの前で小さくガッツポーズをしてしまいました。ツールを使いこなす楽しさを実感した瞬間です。
具体的な使い方は非常にシンプルです。変換したい列をこの関数に放り込むだけで済みます。カンマ入りの数字やハイフンが混ざった列もありますよね。それらもとりあえず数値型として計算可能になります。

欠損値NaNの適切な処理
無事に数値変換が通ったとしてもまだ安心はできません。変換できなかったノイズたちが残っているはずです。「NaN」という空欄の状態で放置されています。このNaNが残っていると計算が狂ってしまう危険があるのです。計算の種類によっては再度エラーが出ることも考えられます。意図しない結果を招くケースも存在するのです。そこでこの空欄をどう埋めるかが次の課題と言えます。
私の場合はNaNを「0」に置き換えるやり方が定番になっています。「fillna(0)」という便利なメソッドがあるのです。欠損している売上データを0円として扱ってみましょう。全体の合計値に影響を与えずに計算を続行できるからです。もちろん文脈によっては平均値で埋めることもあります。その行ごと削除したりする判断が必要な場合もあるでしょう。しかしまずは0で埋めてみるのが最も安全な第一歩です。

またpd.to_numericを使うと自動的に小数の型になります。そのため最後に「astype(int)」をもう一度使いましょう。
欠損値処理:データ分析の最重要決定
最初はNaNの意味がわかりませんでした。そのまま放置して計算を続けてしまったのです。すると平均値の計算結果がExcelと合わなくなりました。原因究明にまた時間を溶かしてしまい落ち込むことになります。欠損値をどう扱うかを決めることは非常に大切です。データ分析において最も重要な意思決定なのだと学びました。
read_csvでの事前型指定と実務活用術
最後に応用編としてもっとスマートな方法をご紹介します。CSVを読み込む「read_csv」の段階で工夫するのです。あらかじめこの列は整数型ですよと教えてあげましょう。引数に「dtype」という指定を加えるだけで済みます。これにより読み込みと同時に型を確定させられるのです。
最大の利点はデータが最初から正しい型になることです。後からわざわざ変換する手間が省けて便利ですね。もし指定した型に合わないデータが含まれていたとします。その場合は読み込みの時点でエラーが出てくれるのです。これはデータの異常という問題の早期発見にも繋がります。あらかじめ中身が綺麗だと分かっているデータもありますよね。定型レポートなどの処理にはこの方法が最適と言えるでしょう。

型エラー、もう挫折しない読み込み術
ただ実務のデータはノイズが多いことがほとんどです。いきなりdtype指定をすると読み込みでエラーが出ることがあります。何度も止まってしまうので最初は挫けそうになりますよね。そういうときはまず普通に読み込んでからpd.to_numericで対応するほうが気が楽です。データが綺麗だと分かっているCSVだけdtype指定を使う、という判断で自分はだいぶ楽になりました。
でも今回紹介した流れを覚えてからは少し気が楽になりました。「型が変なのかな」と疑えるようになるだけで全然違います。もしこの記事が同じ状況で困っている方の参考になれば、とても嬉しいです。
無料プレゼント
Excel業務を自動化する前に確認するチェックリスト(PDF)
自動化していい作業かどうか、VBAかPythonか、最初に避けるべき落とし穴。実務でよく迷うポイントを1枚にまとめました。メールアドレスだけで受け取れます。
¥980 ミニキット
コピペで動かせる3スクリプト+自動化チェックリスト
最新ファイルの自動選択・部署名ゆれの正規化・CSV文字コード確認の3本セット。今週の作業を1つだけ楽にするための最小キットです。
関連リンクとチェックリスト
関連記事
pandasでto_datetime()を使ったときも似たValueErrorが出ることがあります。日付の変換でも同じ流れで対応できます。
関連書籍
Python・pandas関連書籍を、手元で見返せる形にしておきたい場合
pandasのエラー対応は、似た症状を何度も見返すことが多いです。データ前処理や型変換を手元で確認できる本を1冊置いておくと、調べ直しの時間を減らしやすいです。
学習サービスとアンケート
このスキルを活かしてさらに前へ進むなら
PythonやExcel自動化スキルを持ったまま、ITエンジニアとして転職したい方には「EBAエデュケーション」が選択肢です。企業が求めるエンジニア像に合わせたカリキュラムで、実務直結のスキルを習得できます。
[アンケート] この記事は役に立ちましたか?

