読み込み中...

Pythonとデータフレーム完全ガイド!初心者から上級者への10ステップ

Pythonとデータフレームの完全ガイド Python
この記事は約26分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

Pythonで表形式データを扱うなら、pandasのDataFrameを中心に覚えると、読み込み、抽出、集計、欠損値処理、可視化まで一貫して進められます。初心者はpd.DataFrame()で構造を作り、locsort_valuesdescribeへ広げる流れが理解しやすいです。一方、上級者はgroupbyconcatastypereset_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アプリケーション、可視化など幅広い用途で使われます。ただし、文法が短く見えるぶん、listdictDataFrameの違いを曖昧にしたまま進むと、表データの扱いでつまずきやすくなります。

これらの用途の中でデータ分析を支える代表的なライブラリがpandasです。pandasはSeriesDataFrameを中心に、行と列を持つデータを扱いると覚えるとよいでしょう。Pythonの基礎を学んだ後にデータフレームへ進むと、CSVの読み込み、条件抽出、集計、グラフ化まで同じ考え方でつなげられます。

具体的には、アプリ化に関心がある場合はPython初心者のためのアプリ化ガイド、グラフ作成を深めたい場合はPythonで折れ線グラフを作成するガイドと組み合わせると学習範囲を広げやすいです。データフレームはそれらの処理へ渡す中間データとしてもよく使われます。

データフレームとは

データフレームは、行と列で構成される表形式データの構造です。Excelのシートに近い見た目ですが、indexcolumnsdtypeを持ち、列ごとに数値、文字列、日時などの型を扱えますし、これが一つの目安です。そのため、単なる表ではなく、抽出や集計を前提にしたデータ構造と理解できます。

この構造では、列名でdf['Name']のように取り出し、行はlocilocで参照します。一方、Python標準のlistdictは軽量ですが、列単位の統計、欠損値処理、グループ化を自前で書く場面が増えますが、覚えておくと役立つでしょう。データ分析では、処理対象を早めに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へ追加する設定を確認すると、ターミナルからpythonpipを呼び出しやすくなります。ただし、環境によってはpython3pyを使うため、導入後にバージョン確認を行うと混乱を減らせますし、ここがポイントです。

その確認では、python --versionpip --versionを使いると考えられます。Windows、macOS、Linuxでコマンド名が変わる場合があるため、公式ドキュメントの手順に合わせるのが現実的です。Pythonを使った自動化にも関心がある場合は、Pythonでウィンドウ操作を自動化する記事も関連します。

pandasのインストール

pandasは標準ライブラリではないため、データフレームを扱う前に追加します。一般的にはpipで導入し、プロジェクトごとにvenvなどの仮想環境を用意すると、別案件の依存関係と混ざりにくくなると言えるでしょう。一方、Anaconda系の環境ではcondaで管理する選択もあるのが基本です。

pip install pandas

結果: 期待される表示は、pandas本体と依存パッケージのインストール処理が進む内容です。既に導入済みの場合は、要件を満たしている旨のメッセージが出ることがあります。

このコマンドはpipを通じてpandasを追加します。インストール後はimport pandas as pdで読み込み、pd.__version__でバージョンを確認できるのが基本です。ただし、複数のPython環境がある場合は、実行している環境とインストール先が一致しているかを見ますが、これは押さえたい点です。

Pythonでのデータフレームの作り方

データフレームの作成方法は、手元のデータ形式によって変わります。小さなサンプルならlistdictから作り、実務に近い処理ではread_csvread_excelを使う流れになります。初心者はまず、行方向に並ぶリストと列方向にまとまる辞書の違いを押さえると、後続の使い方が整理しやすいです。

サンプルコード1:リストからデータフレームを作る

リストから作る方法では、内側のリストが1行分のデータになるのが目安です。このとき、columnsへ列名を渡すと、表として意味を読み取りやすくなります。ただし、各行の要素数と列名の数がずれるとエラーにつながるため、形をそろえてから渡するのが目安です。

import pandas as pd

data = [['Tom', 10], ['Nick', 15], ['Juli', 14]]
df = pd.DataFrame(data, columns=['Name', 'Age'])

print(df)

結果: 期待される出力は、Name列とAge列を持つ3行の表です。

このコードではpandaspdという別名で読み込み、二次元リストをpd.DataFrameへ渡しています。columnsが列名を決めるため、後からdf['Name']のように列を扱えます。Pythonで小さな検証データを作るときに向いた書き方です。

  Name  Age
0   Tom   10
1  Nick   15
2  Juli   14

結果: 期待される出力例では、左端に自動生成されたindex、続いてNameAgeが並びますし、ここを基本と考えるとよいでしょう。

サンプルコード2:辞書からデータフレームを作る

辞書から作る方法では、キーが列名、値のリストが列データになります。列単位でデータがまとまっているため、CSVやJSONから読み込んだ構造とも考え方が近いです。一方、各列のリスト長が一致していないと表にできないため、データ数を確認してから作成します。

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'Juli'], 'Age': [10, 15, 14]}
df = pd.DataFrame(data)

print(df)

結果: 期待される出力は、辞書のキーを列名として持つデータフレームです。

その構造では、'Name''Age'が列名になり、リスト内の値が上から順に行へ入りますし、ここがポイントです。リストから作る場合よりも列の意味がコード上で分かりやすく、カスタマイズ前の元データを確認しやすい書き方です。

  Name  Age
0   Tom   10
1  Nick   15
2  Juli   14

結果: 期待される出力例はリスト版と同じ形で、DataFrame作成後の扱いも同じになります。

💡 Tips: 手入力の小さな表はdictから作ると列名を見失いにくく、行のまとまりを優先したいサンプルでは二次元listが読みやすくなります。

データフレームの基本的な操作

作成したデータフレームは、列、行、条件、並び順を操作して分析しやすい形へ整えますが、これは押さえたい点です。特に押さえたいのは、列名で取り出す操作と、locでラベルを基準に行を扱う操作です。この使い方を理解すると、フィルタリングや集計へ自然につながります。

サンプルコード3:データの選択

列の選択ではdf['Name']のように列名を使います。行の選択ではdf.loc[1]のようにインデックスラベルを渡するのがポイントです。ただし、locは位置番号ではなくラベルを基準にするため、独自のindexを設定している場合は意味が変わりますし、これが一つの目安です。

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'Juli'], 'Age': [10, 15, 14]}
df = pd.DataFrame(data)

# 列を選択
print(df['Name'])

# 行を選択
print(df.loc[1])

結果: 期待される出力は、先にName列、後にインデックス1の行が表示される形です。

このコードの前半は列方向の取り出しで、返り値はSeriesになります。後半は行方向の取り出しで、同じく行の内容を持つSeriesとして返ります。初心者は、列を選んでも行を選んでも返り値の型が変わる点を確認すると理解しやすいです。

0     Tom
1    Nick
2    Juli
Name: Name, dtype: object
Name    Nick
Age       15
Name: 1, dtype: object

結果: 期待される出力例では、列のdtypeと行のラベルがあわせて示されますし、これが一つの目安です。

サンプルコード4:データの並び替え

並び替えでは、特定の列を基準に行の順番を変えます。sort_valuesは値を見て並び替えるメソッドで、年齢、売上、点数などの比較に使います。一方、列名やインデックス自体の順番を整える場合はsort_indexが候補になるのがポイントです。

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'Juli'], 'Age': [10, 15, 14]}
df = pd.DataFrame(data)

# Ageで並び替え
df_sorted = df.sort_values('Age')

print(df_sorted)

結果: 期待される出力は、Ageが小さい順に並んだデータフレームです。

この処理では元のdfを直接変更せず、並び替え後の結果をdf_sortedへ入れています。そのため、元データを保ちながら比較できます。降順にしたい場合はascending=Falseを加える使い方になるのが一般的です。

  Name  Age
0   Tom   10
2  Juli   14
1  Nick   15

結果: 期待される出力例では、行の順序は変わりますが、元のindexは保持されますが、覚えておくと役立つでしょう。

データフレームでのデータ分析

データフレームで分析を始めるときは、全体傾向の確認と条件抽出から進めます。describeで平均、標準偏差、四分位数を見て、必要な条件をboolean indexingで絞る流れです。この段階で型や欠損値の注意点も見えてくるため、後の対処法につながります。

サンプルコード5:基本統計量の算出

基本統計量は、数値列の分布を短く確認するために使いるのが一般的です。describecountmeanstdminmaxなどを返します。ただし、平均だけでは偏りを読み取れないため、最小値、最大値、四分位数も合わせて見ますが、覚えておくと役立つでしょう。

import pandas as pd

data = {'Score': [85, 90, 78, 92, 88], 'Age': [20, 21, 19, 22, 20]}
df = pd.DataFrame(data)

# 基本統計量の算出
print(df.describe())

結果: 期待される出力は、Score列とAge列の基本統計量です。

このコードでは、数値だけを持つ列が対象になります。文字列列が含まれている場合でも、標準設定では数値列の要約が中心です。上級者がカテゴリ列も含めて確認したい場合は、include引数を検討するのが現実的です。

           Score        Age
count   5.000000   5.000000
mean   86.600000  20.400000
std     5.507571   1.140175
min    78.000000  19.000000
25%    85.000000  20.000000
50%    88.000000  20.000000
75%    90.000000  21.000000
max    92.000000  22.000000

結果: 期待される出力例では、列ごとに件数、平均、標準偏差、四分位数が並びます。

サンプルコード6:データのフィルタリング

フィルタリングは、条件に合う行だけを残す操作です。条件式df['Score'] >= 90は各行に対してTrueまたはFalseを返し、その真偽でデータフレームを絞ります。複数条件では&|を使い、各条件を括弧で囲むのが基本になると整理できます。

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'Juli', 'John', 'Sam'], 'Score': [85, 90, 78, 92, 88]}
df = pd.DataFrame(data)

# スコアが90以上のデータをフィルタリング
high_score_df = df[df['Score'] >= 90]

print(high_score_df)

結果: 期待される出力は、Scoreが90以上の行だけを含む表です。

この使い方では、条件式そのものが行数と同じ長さの真偽値列になります。その真偽値列をdf[...]へ渡すことで、Trueの行だけが残ります。データフレーム分析では頻出するため、注意点として演算子の優先順位を意識するのが現実的です。

   Name  Score
1  Nick     90
3  John     92

結果: 期待される出力例では、条件に合ったNickJohnの行が残りますし、ここを基本と考えるとよいでしょう。

データフレームの応用例

基本操作が使えるようになると、欠損値処理、結合、グループ化、可視化へ進めます。これらは分析前処理の中心であり、単独で使うよりも連続した処理として組み合わせる場面が多いです。ただし、値を補う判断や表を結合するキーの選び方は、分析結果に影響します。

⚠️ 注意: 欠損値を平均値で埋める処理は学習用サンプルとして分かりやすい一方、すべてのデータに適した対処法ではありません。欠損の理由が入力漏れ、未測定、対象外のどれかで意味が変わりますし、ここがポイントです。

サンプルコード7:欠損値の処理

欠損値は、pandasではNaNとして扱われることが多いです。fillnaは欠損を特定の値で補うメソッドで、平均値、中央値、固定値などを入れられます。ただし、補完後のデータは元の観測値とは異なるため、注意点として補完方針を記録します。

import pandas as pd
import numpy as np

data = {'Score': [85, np.nan, 78, np.nan, 88], 'Age': [20, 21, np.nan, 22, 20]}
df = pd.DataFrame(data)

# 欠損値を平均値で補完
df.fillna(df.mean(), inplace=True)

print(df)

結果: 期待される出力は、欠損値が各列の平均値で補われた表です。

このコードではnp.nanで欠損を作り、df.mean()で列ごとの平均を計算しています。inplace=Trueは元のdfを更新する書き方ですが、処理の見通しを優先する場合は代入で受ける方法もあります。上級者は前後比較のために元データを残す設計を選ぶことがあると整理できると理解できます。

       Score   Age
0  85.000000  20.0
1  83.666667  21.0
2  78.000000  21.0
3  83.666667  22.0
4  88.000000  20.0

結果: 期待される出力例では、ScoreAgeの欠損箇所が平均値に置き換わります。

サンプルコード8:データの結合

複数の表を組み合わせる場合、concatmergeの違いを意識します。concatは行方向または列方向に連結し、mergeはキー列を基準に結合すると覚えるとよいでしょう。このサンプルではaxis=1により列方向へ結合すると理解できます。

import pandas as pd

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
                    'B': ['B0', 'B1', 'B2']},
                   index=['K0', 'K1', 'K2'])

df2 = pd.DataFrame({'C': ['C0', 'C1', 'C2'],
                    'D': ['D0', 'D1', 'D2']},
                   index=['K0', 'K2', 'K3'])

# データの結合
result = pd.concat([df1, df2], axis=1)

print(result)

結果: 期待される出力は、共通するインデックスをそろえながら列方向に結合した表です。

この処理では、インデックスK0K2は両方の表に存在するため値が横に並びます。一方、片方にしかないK1K3では、存在しない側がNaNになります。結合の注意点は、行が増減する理由をインデックスやキーから説明できる状態にしておくことです。

     A    B    C    D
K0  A0   B0   C0   D0
K1  A1   B1  NaN  NaN
K2  A2   B2   C1   D1
K3 NaN  NaN   C2   D2

結果: 期待される出力例では、片方に存在しないインデックスの列値がNaNになると考えられます。

サンプルコード9:データのグループ化

グループ化は、カテゴリごとに集計する操作です。会社別、店舗別、月別の平均や合計を出すときにgroupbyを使います。ただし、pandas 2系では文字列列を含む表に対して単純にmeanを呼ぶと型の扱いでエラーになる場合があるため、数値列を明示します。

import pandas as pd

data = {'Company':['GOOG','GOOG','MSFT','MSFT','FB','FB'],
        'Person':['Sam','Charlie','Amy','Vanessa','Carl','Sarah'],
        'Sales':[200,120,340,124,243,350]}

df = pd.DataFrame(data)

# 'Company'でグループ化して平均を求める
grouped = df.groupby('Company')['Sales'].mean()

print(grouped)

結果: 期待される出力は、会社ごとのSales平均値です。

このサンプルでは、集計対象を['Sales']ではなく'Sales'で取り出しているため、返り値はSeriesになります。表の形を保ちたい場合はdf.groupby('Company')[['Sales']].mean()という書き方もあります。Pythonの分析コードでは、返り値の型まで意識すると後続処理が安定すると覚えるとよいでしょう。

Company
FB      296.5
GOOG    160.0
MSFT    232.0
Name: Sales, dtype: float64

結果: 期待される出力例では、Companyごとの平均売上がfloat64で示されますが、これは押さえたい点です。

サンプルコード10:データの可視化

可視化では、数値の推移や比較をグラフで確認します。pandasのplotは内部でmatplotlibを利用し、kind='bar'のような指定でグラフ種別を切り替えます。折れ線グラフをさらに学ぶ場合は、Pythonで折れ線グラフ作成を扱う記事も役立ちますし、ここを基本と考えるとよいでしょう。

import pandas as pd
import matplotlib.pyplot as plt

data = {'Year': [2015, 2016, 2017, 2018, 2019],
        'Sales': [200, 210, 220, 230, 240]}

df = pd.DataFrame(data)

df.plot(x='Year', y='Sales', kind='bar')
plt.show()

結果: 期待される表示は、Yearを横軸、Salesを縦軸にした棒グラフです。

このコードでは、plotxyで軸に使う列を決めています。plt.show()はグラフを表示するための呼び出しで、ノートブック環境やIDEによって見え方が変わる場合があります。単位、タイトル、凡例を加えると、分析結果として読み取りやすくなると考えられますし、これが一つの目安です。

データフレームの注意点と対処法

データフレームの注意点は、型、インデックス、欠損値、結合キーに集まりやすいです。初心者がつまずきやすいのは、見た目が数字でもobject型の文字列として扱われるケースです。その対処法として、計算前にdtypesinfoで列の状態を確認します。

注意点1:データ型の違いによるエラー

データ型が混ざると、期待した計算にならないことがあります。数値に見える'4'でも、引用符で囲まれていれば文字列です。この違いを見落とすと、合計のつもりが文字列結合になるため、対処法としてastypeto_numericで変換すると言えるでしょう。

import pandas as pd

data = {'A': [1, 2, 3], 'B': ['4', '5', '6']}
df = pd.DataFrame(data)

print(df['A'].sum())
print(df['B'].sum())

結果: 期待される出力は、A列が数値合計、B列が文字列結合になる内容です。

この例では、A列は整数、B列は文字列です。sumは型に応じて処理されるため、文字列では連結として扱われます。データフレームの使い方として、読み込み直後に型を確認する習慣が対処法になります。

6
456

結果: 期待される出力例では、数値列の合計は6、文字列列の結果は456です。

df['B'] = df['B'].astype(int)
print(df['B'].sum())

結果: 期待される出力は、B列を整数へ変換した後の合計値です。

この対処法では、astype(int)によって文字列の数字を整数に変換しています。ただし、空文字や単位付き文字列が混ざると変換に失敗します。その場合はpd.to_numericerrors='coerce'を組み合わせ、変換できない値を欠損として扱う方法もあると言えるでしょう。

15

結果: 期待される出力例は、4 + 5 + 6の計算結果である15です。

注意点2:インデックスによるエラー

インデックスは行を識別するラベルです。抽出や結合の後に元のインデックスが残ると、見た目の行番号と実際のラベルがずれることがあります。そのため、出力前や再結合前にreset_indexで整える使い方があります。

import pandas as pd

data = {'A': [1, 2, 3]}
df = pd.DataFrame(data, index=['a', 'b', 'c'])

df_reset = df.reset_index()
print(df_reset)

結果: 期待される出力は、元のインデックスがindex列として残った表です。

この処理では、'a''b''c'という元のラベルが列へ移りますが、覚えておくと役立つでしょう。履歴として残したい場合はこの挙動が使えます。一方、単に連番へ戻したいだけなら、元のインデックス列が不要になることもあるのが基本です。

  index  A
0     a  1
1     b  2
2     c  3

結果: 期待される出力例では、元のラベルが新しい列として保持されます。

df_reset = df.reset_index(drop=True)
print(df_reset)

結果: 期待される出力は、元のインデックスを列に残さず連番へ戻した表です。

この対処法では、drop=Trueにより元のインデックスを捨てているのが基本です。抽出後のデータをCSVへ出す場合や、行番号を見やすくしたい場合に向いています。ただし、元のラベルが意味を持つIDなら、削除前に必要性を確認するのが目安です。

   A
0  1
1  2
2  3

結果: 期待される出力例では、index列は作られず、0から始まる連番になります。

ℹ️ 補足: 非推奨のdf.appendは現行の書き方として扱わず、行を追加する場合はpd.concatを使いるのが目安です。古い記事やサンプルを読むときは、pandasのバージョン差も確認します。

データフレームのカスタマイズ方法

データフレームのカスタマイズでは、列名、行順、列順、表示形式を目的に合わせて整えます。分析の途中では短い列名が扱いやすく、共有用の出力では意味が伝わる列名が向いているのがポイントです。Pythonの処理では、見た目だけでなく後続コードで参照しやすい名前にすることが大切になるのがポイントです。

カスタマイズ1:列名の変更

列名を変更する場合はrenameを使います。辞書形式で古い列名と新しい列名を対応させるため、一部の列だけを変更できます。ただし、同じ列名を複数作ると参照が分かりにくくなるため、カスタマイズ後のcolumnsを確認するのが一般的です。

import pandas as pd

data = {'A': [1, 2, 3]}
df = pd.DataFrame(data)

df = df.rename(columns={'A': 'Z'})
print(df)

結果: 期待される出力は、列名AZへ変わった表です。

このコードでは、columns引数に辞書を渡して列名を変えているのが一般的です。元のdfを更新したい場合は代入するか、inplaceを使う書き方があります。読みやすさを重視するなら、処理後の変数へ代入する形が追跡しやすいです。

   Z
0  1
1  2
2  3

結果: 期待される出力例では、データの値は同じまま列見出しだけが変わります。

カスタマイズ2:行と列の並び替え

行の並び替えにはsort_values、列名の順序調整にはsort_index(axis=1)を使えるのが現実的です。行と列を整えると、出力表の視認性が上がり、レポートやCSV保存前の確認がしやすくなります。一方、並び替え後も元のインデックスが残るため、必要に応じてreset_indexを組み合わせますし、ここがポイントです。

import pandas as pd

data = {'B': [2, 1, 3], 'A': ['b', 'a', 'c']}
df = pd.DataFrame(data)

df_sorted = df.sort_values('B')
print(df_sorted)

df_sorted = df_sorted.sort_index(axis=1)
print(df_sorted)

結果: 期待される出力は、先にB列で行を並べ、続いて列名順に列を整えた内容です。

このサンプルでは、最初にBの値が小さい順へ並びます。その後、axis=1を指定したsort_indexで列名がアルファベット順になります。上級者が複数列で並べる場合は、sort_values(['B','A'])のような使い方も選べますが、これは押さえたい点です。

   B  A
1  1  a
0  2  b
2  3  c
   A  B
1  a  1
0  b  2
2  c  3

結果: 期待される出力例では、行順がB基準になり、列順はABの順になると整理できます。

こうしたカスタマイズは、分析そのものだけでなく、読み手に渡すデータの整形にも関わります。注意点として、見た目を整える処理と値を変える処理を混ぜすぎると、後から差分を追いにくくなります。そのため、列名変更、並び替え、欠損値処理は処理単位を分けて書くと保守しやすいです。

まとめ

Pythonでデータフレームを扱う学習は、pd.DataFrameで表を作り、locsort_valuesdescribe、フィルタリングへ進む流れで整理できると理解できます。初心者は、行と列、インデックス、データ型の関係を早い段階で押さえると、エラー時の対処法を考えやすくなります。上級者は、欠損値処理、結合、グループ化、カスタマイズを組み合わせ、分析手順を再利用できる形へ整えることが課題になるのが現実的です。

その中でも、注意点として残りやすいのは型変換とインデックスです。数値に見える文字列はastypeto_numericで扱いをそろえ、抽出後の行番号は必要に応じてreset_indexで整えます。データフレームの使い方を安定させるには、作成、確認、加工、分析、出力の順に小さく確認するのが現実的です。

Pythonの表操作は、アプリ化、グラフ化、ファイル処理ともつながりますし、ここを基本と考えるとよいでしょう。関連する実装として、Pythonで改行あり・なしを制御する方法は文字列出力の扱いに、Pythonでウィンドウ操作を自動化する方法は処理の自動化に役立ちます。データフレームを軸に学ぶと、集計結果をファイルへ出す処理や、可視化して確認する処理までつなげやすくなります。

データフレームは、作るだけでなく、型、欠損、インデックス、列名を整えてから分析へ渡すことで力を発揮すると覚えるとよいでしょう。使い方を覚える段階では短いサンプルで動きを確認し、実データに近づくほど注意点と対処法を明文化します。カスタマイズも同じで、読みやすさと再現性の両方を満たす形に整えると、Pythonによる分析作業を継続しやすくなると整理できます。

関連記事

著者: Japanシーモア編集部

Japanシーモアは、Web/IoT/APP/SYS 分野のプログラミング情報を体系的に提供するメディアです。本記事は編集部による執筆とAI支援を組み合わせて制作し、公開前に編集部が校正しています。誤りや改善案がございましたらお問い合わせよりご連絡ください。

※本記事は実在のエンジニア複数名で構成される Japanシーモア編集部が、AI支援を活用して作成・校正・公開しています。