はじめに
Pythonで表形式データを扱うなら、pandasのDataFrameを中心に覚えると、読み込み、抽出、集計、欠損値処理、可視化まで一貫して進められます。初心者はpd.DataFrame()で構造を作り、loc、sort_values、describeへ広げる流れが理解しやすいです。一方、上級者はgroupby、concat、astype、reset_indexを組み合わせ、分析前処理の再現性を高める使い方が中心になります。
そのため、データフレームの作成だけでなく、注意点と対処法、カスタマイズの考え方まで一続きで押さえる必要があると理解できます。Pythonの導入やpandasの確認にはPython公式ドキュメント、APIの詳細にはpandas公式ドキュメントを参照すると、仕様に沿った判断ができます。表の操作に慣れたい場合は、関連するPythonで表を操作するための詳細ガイドも理解を補助します。
- Python 3.12 系
- pandas 2.2 系
- NumPy 2.0 系
- matplotlib 3.9 系
- Pythonとpandasでデータフレームを作る基本
- 初心者が迷いやすい列選択、行選択、並び替えの使い方
- 分析で使う
describe、フィルタリング、groupbyの考え方 - 欠損値、型、インデックスに関する注意点と対処法
- 上級者にも役立つ結合、可視化、カスタマイズの整理
Pythonとは
Pythonは、読みやすい文法と豊富なライブラリを備えたプログラミング言語です。一般に、データ分析、機械学習、自動化、Webアプリケーション、可視化など幅広い用途で使われます。ただし、文法が短く見えるぶん、list、dict、DataFrameの違いを曖昧にしたまま進むと、表データの扱いでつまずきやすくなります。
これらの用途の中でデータ分析を支える代表的なライブラリがpandasです。pandasはSeriesとDataFrameを中心に、行と列を持つデータを扱いると覚えるとよいでしょう。Pythonの基礎を学んだ後にデータフレームへ進むと、CSVの読み込み、条件抽出、集計、グラフ化まで同じ考え方でつなげられます。
具体的には、アプリ化に関心がある場合はPython初心者のためのアプリ化ガイド、グラフ作成を深めたい場合はPythonで折れ線グラフを作成するガイドと組み合わせると学習範囲を広げやすいです。データフレームはそれらの処理へ渡す中間データとしてもよく使われます。
データフレームとは
データフレームは、行と列で構成される表形式データの構造です。Excelのシートに近い見た目ですが、index、columns、dtypeを持ち、列ごとに数値、文字列、日時などの型を扱えますし、これが一つの目安です。そのため、単なる表ではなく、抽出や集計を前提にしたデータ構造と理解できます。
この構造では、列名でdf['Name']のように取り出し、行はlocやilocで参照します。一方、Python標準のlistやdictは軽量ですが、列単位の統計、欠損値処理、グループ化を自前で書く場面が増えますが、覚えておくと役立つでしょう。データ分析では、処理対象を早めにDataFrameへそろえるほうが扱いやすいです。
| 項目 | 主な機能 | 使う場面 | 注意点 | 代表コード |
|---|---|---|---|---|
| 作成 | 表を生成 | リストや辞書を表へ変換 | 列数をそろえる | pd.DataFrame() |
| 列選択 | 特定列を取得 | 名前や点数だけ見る | 列名の誤字に注意 | df['Name'] |
| 行選択 | ラベルで取得 | 特定行を確認 | indexを確認 | df.loc[1] |
| 位置選択 | 番号で取得 | 先頭行を確認 | 0始まりで考える | df.iloc[0] |
| 並び替え | 値でソート | 年齢順や点数順 | 昇順と降順を選ぶ | sort_values |
| 基本統計 | 平均や最大値 | 全体傾向の確認 | 数値列が対象 | describe |
| 条件抽出 | 真偽で絞る | 90点以上だけ抽出 | 条件式を括弧で整理 | df[df['Score'] >= 90] |
| 欠損値確認 | 空欄を調べる | 前処理の入口 | 欠損の意味を確認 | isna |
| 欠損値補完 | 値を埋める | 平均値で補う | 根拠なく埋めない | fillna |
| 結合 | 表をつなぐ | 複数表を統合 | 行方向と列方向を選ぶ | concat |
| キー結合 | 列を基準に結合 | IDで対応付け | 重複キーを確認 | merge |
| グループ化 | 分類して集計 | 会社別平均 | 数値列を選ぶ | groupby |
| 型変換 | 列型を変更 | 文字列数字を数値へ | 変換不能値に注意 | astype |
| 列名変更 | 見出しを変更 | 分析しやすい名前へ | 既存列名を確認 | rename |
| インデックス初期化 | 番号を振り直す | 抽出後の整形 | 元indexを残すか決める | reset_index |
| 列順変更 | 列を並べる | 出力前の整形 | 存在しない列名に注意 | df[['A','B']] |
| 行削除 | 不要行を外す | 欠損行の除去 | 元データ保存を検討 | dropna |
| 列削除 | 不要列を外す | 分析対象を絞る | axisを確認 | drop |
| CSV読込 | ファイルを表へ | 外部データ分析 | 文字コードに注意 | read_csv |
| CSV保存 | 表を出力 | 処理結果の共有 | index出力を選ぶ | to_csv |
| Excel読込 | ブックを表へ | 業務データの利用 | シート名を確認 | read_excel |
| 先頭確認 | 冒頭行を見る | 構造の把握 | 件数だけで判断しない | head |
| 末尾確認 | 最後の行を見る | 追記確認 | 並び順を意識 | tail |
| 型確認 | 列型を見る | 計算前の確認 | object型を点検 | dtypes |
| 要約情報 | 行数や型を確認 | 初回確認 | 欠損数も見る | info |
| 重複確認 | 同一行を探す | データ品質の確認 | キー列を決める | duplicated |
| 重複削除 | 同一行を削る | 集計前の整形 | 削除条件を残す | drop_duplicates |
| 日付変換 | 文字列を日時へ | 時系列分析 | 形式違いに注意 | to_datetime |
| 可視化 | グラフを描く | 傾向確認 | 軸と単位を明示 | plot |
| 表示設定 | 見た目を調整 | 確認しやすくする | 分析結果とは分ける | set_option |
Pythonでデータフレームを使うための準備
Pythonのインストール
Pythonを使うには、公式サイトから配布されている3系を導入します。初心者はOSに合うインストーラーを選び、インストール時にPATHへ追加する設定を確認すると、ターミナルからpythonやpipを呼び出しやすくなります。ただし、環境によってはpython3やpyを使うため、導入後にバージョン確認を行うと混乱を減らせますし、ここがポイントです。
その確認では、python --versionやpip --versionを使いると考えられます。Windows、macOS、Linuxでコマンド名が変わる場合があるため、公式ドキュメントの手順に合わせるのが現実的です。Pythonを使った自動化にも関心がある場合は、Pythonでウィンドウ操作を自動化する記事も関連します。
pandasのインストール
pandasは標準ライブラリではないため、データフレームを扱う前に追加します。一般的にはpipで導入し、プロジェクトごとにvenvなどの仮想環境を用意すると、別案件の依存関係と混ざりにくくなると言えるでしょう。一方、Anaconda系の環境ではcondaで管理する選択もあるのが基本です。
結果: 期待される表示は、pandas本体と依存パッケージのインストール処理が進む内容です。既に導入済みの場合は、要件を満たしている旨のメッセージが出ることがあります。
このコマンドはpipを通じてpandasを追加します。インストール後はimport pandas as pdで読み込み、pd.__version__でバージョンを確認できるのが基本です。ただし、複数のPython環境がある場合は、実行している環境とインストール先が一致しているかを見ますが、これは押さえたい点です。
Pythonでのデータフレームの作り方
データフレームの作成方法は、手元のデータ形式によって変わります。小さなサンプルならlistやdictから作り、実務に近い処理ではread_csvやread_excelを使う流れになります。初心者はまず、行方向に並ぶリストと列方向にまとまる辞書の違いを押さえると、後続の使い方が整理しやすいです。
サンプルコード1:リストからデータフレームを作る
リストから作る方法では、内側のリストが1行分のデータになるのが目安です。このとき、columnsへ列名を渡すと、表として意味を読み取りやすくなります。ただし、各行の要素数と列名の数がずれるとエラーにつながるため、形をそろえてから渡するのが目安です。
結果: 期待される出力は、Name列とAge列を持つ3行の表です。
このコードではpandasをpdという別名で読み込み、二次元リストをpd.DataFrameへ渡しています。columnsが列名を決めるため、後からdf['Name']のように列を扱えます。Pythonで小さな検証データを作るときに向いた書き方です。
結果: 期待される出力例では、左端に自動生成されたindex、続いてNameとAgeが並びますし、ここを基本と考えるとよいでしょう。
サンプルコード2:辞書からデータフレームを作る
辞書から作る方法では、キーが列名、値のリストが列データになります。列単位でデータがまとまっているため、CSVやJSONから読み込んだ構造とも考え方が近いです。一方、各列のリスト長が一致していないと表にできないため、データ数を確認してから作成します。
結果: 期待される出力は、辞書のキーを列名として持つデータフレームです。
その構造では、'Name'と'Age'が列名になり、リスト内の値が上から順に行へ入りますし、ここがポイントです。リストから作る場合よりも列の意味がコード上で分かりやすく、カスタマイズ前の元データを確認しやすい書き方です。
結果: 期待される出力例はリスト版と同じ形で、DataFrame作成後の扱いも同じになります。
💡 Tips: 手入力の小さな表はdictから作ると列名を見失いにくく、行のまとまりを優先したいサンプルでは二次元listが読みやすくなります。
データフレームの基本的な操作
作成したデータフレームは、列、行、条件、並び順を操作して分析しやすい形へ整えますが、これは押さえたい点です。特に押さえたいのは、列名で取り出す操作と、locでラベルを基準に行を扱う操作です。この使い方を理解すると、フィルタリングや集計へ自然につながります。
サンプルコード3:データの選択
列の選択ではdf['Name']のように列名を使います。行の選択ではdf.loc[1]のようにインデックスラベルを渡するのがポイントです。ただし、locは位置番号ではなくラベルを基準にするため、独自のindexを設定している場合は意味が変わりますし、これが一つの目安です。
結果: 期待される出力は、先にName列、後にインデックス1の行が表示される形です。
このコードの前半は列方向の取り出しで、返り値はSeriesになります。後半は行方向の取り出しで、同じく行の内容を持つSeriesとして返ります。初心者は、列を選んでも行を選んでも返り値の型が変わる点を確認すると理解しやすいです。
結果: 期待される出力例では、列のdtypeと行のラベルがあわせて示されますし、これが一つの目安です。
サンプルコード4:データの並び替え
並び替えでは、特定の列を基準に行の順番を変えます。sort_valuesは値を見て並び替えるメソッドで、年齢、売上、点数などの比較に使います。一方、列名やインデックス自体の順番を整える場合はsort_indexが候補になるのがポイントです。
結果: 期待される出力は、Ageが小さい順に並んだデータフレームです。
この処理では元のdfを直接変更せず、並び替え後の結果をdf_sortedへ入れています。そのため、元データを保ちながら比較できます。降順にしたい場合はascending=Falseを加える使い方になるのが一般的です。
結果: 期待される出力例では、行の順序は変わりますが、元のindexは保持されますが、覚えておくと役立つでしょう。
データフレームでのデータ分析
データフレームで分析を始めるときは、全体傾向の確認と条件抽出から進めます。describeで平均、標準偏差、四分位数を見て、必要な条件をboolean indexingで絞る流れです。この段階で型や欠損値の注意点も見えてくるため、後の対処法につながります。
サンプルコード5:基本統計量の算出
基本統計量は、数値列の分布を短く確認するために使いるのが一般的です。describeはcount、mean、std、min、maxなどを返します。ただし、平均だけでは偏りを読み取れないため、最小値、最大値、四分位数も合わせて見ますが、覚えておくと役立つでしょう。
結果: 期待される出力は、Score列とAge列の基本統計量です。
このコードでは、数値だけを持つ列が対象になります。文字列列が含まれている場合でも、標準設定では数値列の要約が中心です。上級者がカテゴリ列も含めて確認したい場合は、include引数を検討するのが現実的です。
結果: 期待される出力例では、列ごとに件数、平均、標準偏差、四分位数が並びます。
サンプルコード6:データのフィルタリング
フィルタリングは、条件に合う行だけを残す操作です。条件式df['Score'] >= 90は各行に対してTrueまたはFalseを返し、その真偽でデータフレームを絞ります。複数条件では&や|を使い、各条件を括弧で囲むのが基本になると整理できます。
結果: 期待される出力は、Scoreが90以上の行だけを含む表です。
この使い方では、条件式そのものが行数と同じ長さの真偽値列になります。その真偽値列をdf[...]へ渡すことで、Trueの行だけが残ります。データフレーム分析では頻出するため、注意点として演算子の優先順位を意識するのが現実的です。
結果: 期待される出力例では、条件に合ったNickとJohnの行が残りますし、ここを基本と考えるとよいでしょう。
データフレームの応用例
基本操作が使えるようになると、欠損値処理、結合、グループ化、可視化へ進めます。これらは分析前処理の中心であり、単独で使うよりも連続した処理として組み合わせる場面が多いです。ただし、値を補う判断や表を結合するキーの選び方は、分析結果に影響します。
サンプルコード7:欠損値の処理
欠損値は、pandasではNaNとして扱われることが多いです。fillnaは欠損を特定の値で補うメソッドで、平均値、中央値、固定値などを入れられます。ただし、補完後のデータは元の観測値とは異なるため、注意点として補完方針を記録します。
結果: 期待される出力は、欠損値が各列の平均値で補われた表です。
このコードではnp.nanで欠損を作り、df.mean()で列ごとの平均を計算しています。inplace=Trueは元のdfを更新する書き方ですが、処理の見通しを優先する場合は代入で受ける方法もあります。上級者は前後比較のために元データを残す設計を選ぶことがあると整理できると理解できます。
結果: 期待される出力例では、ScoreとAgeの欠損箇所が平均値に置き換わります。
サンプルコード8:データの結合
複数の表を組み合わせる場合、concatとmergeの違いを意識します。concatは行方向または列方向に連結し、mergeはキー列を基準に結合すると覚えるとよいでしょう。このサンプルではaxis=1により列方向へ結合すると理解できます。
結果: 期待される出力は、共通するインデックスをそろえながら列方向に結合した表です。
この処理では、インデックスK0とK2は両方の表に存在するため値が横に並びます。一方、片方にしかないK1やK3では、存在しない側がNaNになります。結合の注意点は、行が増減する理由をインデックスやキーから説明できる状態にしておくことです。
結果: 期待される出力例では、片方に存在しないインデックスの列値がNaNになると考えられます。
サンプルコード9:データのグループ化
グループ化は、カテゴリごとに集計する操作です。会社別、店舗別、月別の平均や合計を出すときにgroupbyを使います。ただし、pandas 2系では文字列列を含む表に対して単純にmeanを呼ぶと型の扱いでエラーになる場合があるため、数値列を明示します。
結果: 期待される出力は、会社ごとのSales平均値です。
このサンプルでは、集計対象を['Sales']ではなく'Sales'で取り出しているため、返り値はSeriesになります。表の形を保ちたい場合はdf.groupby('Company')[['Sales']].mean()という書き方もあります。Pythonの分析コードでは、返り値の型まで意識すると後続処理が安定すると覚えるとよいでしょう。
結果: 期待される出力例では、Companyごとの平均売上がfloat64で示されますが、これは押さえたい点です。
サンプルコード10:データの可視化
可視化では、数値の推移や比較をグラフで確認します。pandasのplotは内部でmatplotlibを利用し、kind='bar'のような指定でグラフ種別を切り替えます。折れ線グラフをさらに学ぶ場合は、Pythonで折れ線グラフ作成を扱う記事も役立ちますし、ここを基本と考えるとよいでしょう。
結果: 期待される表示は、Yearを横軸、Salesを縦軸にした棒グラフです。
このコードでは、plotのxとyで軸に使う列を決めています。plt.show()はグラフを表示するための呼び出しで、ノートブック環境やIDEによって見え方が変わる場合があります。単位、タイトル、凡例を加えると、分析結果として読み取りやすくなると考えられますし、これが一つの目安です。
データフレームの注意点と対処法
データフレームの注意点は、型、インデックス、欠損値、結合キーに集まりやすいです。初心者がつまずきやすいのは、見た目が数字でもobject型の文字列として扱われるケースです。その対処法として、計算前にdtypesやinfoで列の状態を確認します。
注意点1:データ型の違いによるエラー
データ型が混ざると、期待した計算にならないことがあります。数値に見える'4'でも、引用符で囲まれていれば文字列です。この違いを見落とすと、合計のつもりが文字列結合になるため、対処法としてastypeやto_numericで変換すると言えるでしょう。
結果: 期待される出力は、A列が数値合計、B列が文字列結合になる内容です。
この例では、A列は整数、B列は文字列です。sumは型に応じて処理されるため、文字列では連結として扱われます。データフレームの使い方として、読み込み直後に型を確認する習慣が対処法になります。
結果: 期待される出力例では、数値列の合計は6、文字列列の結果は456です。
結果: 期待される出力は、B列を整数へ変換した後の合計値です。
この対処法では、astype(int)によって文字列の数字を整数に変換しています。ただし、空文字や単位付き文字列が混ざると変換に失敗します。その場合はpd.to_numericとerrors='coerce'を組み合わせ、変換できない値を欠損として扱う方法もあると言えるでしょう。
結果: 期待される出力例は、4 + 5 + 6の計算結果である15です。
注意点2:インデックスによるエラー
インデックスは行を識別するラベルです。抽出や結合の後に元のインデックスが残ると、見た目の行番号と実際のラベルがずれることがあります。そのため、出力前や再結合前にreset_indexで整える使い方があります。
結果: 期待される出力は、元のインデックスがindex列として残った表です。
この処理では、'a'、'b'、'c'という元のラベルが列へ移りますが、覚えておくと役立つでしょう。履歴として残したい場合はこの挙動が使えます。一方、単に連番へ戻したいだけなら、元のインデックス列が不要になることもあるのが基本です。
結果: 期待される出力例では、元のラベルが新しい列として保持されます。
結果: 期待される出力は、元のインデックスを列に残さず連番へ戻した表です。
この対処法では、drop=Trueにより元のインデックスを捨てているのが基本です。抽出後のデータをCSVへ出す場合や、行番号を見やすくしたい場合に向いています。ただし、元のラベルが意味を持つIDなら、削除前に必要性を確認するのが目安です。
結果: 期待される出力例では、index列は作られず、0から始まる連番になります。
df.appendは現行の書き方として扱わず、行を追加する場合はpd.concatを使いるのが目安です。古い記事やサンプルを読むときは、pandasのバージョン差も確認します。データフレームのカスタマイズ方法
データフレームのカスタマイズでは、列名、行順、列順、表示形式を目的に合わせて整えます。分析の途中では短い列名が扱いやすく、共有用の出力では意味が伝わる列名が向いているのがポイントです。Pythonの処理では、見た目だけでなく後続コードで参照しやすい名前にすることが大切になるのがポイントです。
カスタマイズ1:列名の変更
列名を変更する場合はrenameを使います。辞書形式で古い列名と新しい列名を対応させるため、一部の列だけを変更できます。ただし、同じ列名を複数作ると参照が分かりにくくなるため、カスタマイズ後のcolumnsを確認するのが一般的です。
結果: 期待される出力は、列名AがZへ変わった表です。
このコードでは、columns引数に辞書を渡して列名を変えているのが一般的です。元のdfを更新したい場合は代入するか、inplaceを使う書き方があります。読みやすさを重視するなら、処理後の変数へ代入する形が追跡しやすいです。
結果: 期待される出力例では、データの値は同じまま列見出しだけが変わります。
カスタマイズ2:行と列の並び替え
行の並び替えにはsort_values、列名の順序調整にはsort_index(axis=1)を使えるのが現実的です。行と列を整えると、出力表の視認性が上がり、レポートやCSV保存前の確認がしやすくなります。一方、並び替え後も元のインデックスが残るため、必要に応じてreset_indexを組み合わせますし、ここがポイントです。
結果: 期待される出力は、先にB列で行を並べ、続いて列名順に列を整えた内容です。
このサンプルでは、最初にBの値が小さい順へ並びます。その後、axis=1を指定したsort_indexで列名がアルファベット順になります。上級者が複数列で並べる場合は、sort_values(['B','A'])のような使い方も選べますが、これは押さえたい点です。
結果: 期待される出力例では、行順がB基準になり、列順はA、Bの順になると整理できます。
こうしたカスタマイズは、分析そのものだけでなく、読み手に渡すデータの整形にも関わります。注意点として、見た目を整える処理と値を変える処理を混ぜすぎると、後から差分を追いにくくなります。そのため、列名変更、並び替え、欠損値処理は処理単位を分けて書くと保守しやすいです。
まとめ
Pythonでデータフレームを扱う学習は、pd.DataFrameで表を作り、loc、sort_values、describe、フィルタリングへ進む流れで整理できると理解できます。初心者は、行と列、インデックス、データ型の関係を早い段階で押さえると、エラー時の対処法を考えやすくなります。上級者は、欠損値処理、結合、グループ化、カスタマイズを組み合わせ、分析手順を再利用できる形へ整えることが課題になるのが現実的です。
その中でも、注意点として残りやすいのは型変換とインデックスです。数値に見える文字列はastypeやto_numericで扱いをそろえ、抽出後の行番号は必要に応じてreset_indexで整えます。データフレームの使い方を安定させるには、作成、確認、加工、分析、出力の順に小さく確認するのが現実的です。
Pythonの表操作は、アプリ化、グラフ化、ファイル処理ともつながりますし、ここを基本と考えるとよいでしょう。関連する実装として、Pythonで改行あり・なしを制御する方法は文字列出力の扱いに、Pythonでウィンドウ操作を自動化する方法は処理の自動化に役立ちます。データフレームを軸に学ぶと、集計結果をファイルへ出す処理や、可視化して確認する処理までつなげやすくなります。
データフレームは、作るだけでなく、型、欠損、インデックス、列名を整えてから分析へ渡すことで力を発揮すると覚えるとよいでしょう。使い方を覚える段階では短いサンプルで動きを確認し、実データに近づくほど注意点と対処法を明文化します。カスタマイズも同じで、読みやすさと再現性の両方を満たす形に整えると、Pythonによる分析作業を継続しやすくなると整理できます。
関連記事
- Python初心者のための完全ガイド!アプリ化の10ステップ
- Pythonで実現!ウィンドウ操作の自動化15選
- Pythonで折れ線グラフ作成の完全ガイド10選
- 初心者必見!Pythonで表を操作するための7つの詳細ガイド
- Pythonで改行あり・なしを制御する方法と応用例10選
※本記事は実在のエンジニア複数名で構成される Japanシーモア編集部が、AI支援を活用して作成・校正・公開しています。


