Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Pandas】DataFrameの先頭に新しい行を追加する方法

PandasにおけるDataFrameは、データを行と列の表形式で保持する2次元のデータ構造です。リスト、辞書、Series、別のDataFrameなど、さまざまなデータから作成できます。しかし、すでに作成済みのDataFrameに行を追加する場合、通常の方法では新しい行は末尾に追加されます。本記事では、インデックスを活用したテクニックによって、DataFrameの先頭に新しい行を追加する方法を2つ紹介します。

なお、かつてはDataFrame.append()メソッドが行の追加によく使われていましたが、pandas 1.4以降で非推奨となり、pandas 2.0で削除されました。現在はpd.concat()の使用が公式に推奨されています。

サンプルDataFrameの作成

まず、例として使用する基本的なDataFrameを作成します。

import pandas as pd

data = {'Name': ['Tom', 'Jack', 'Mary', 'Ricky'],
        'Age': [28, 34, 29, 42],
        'Gender': ['M', 'M', 'F', 'F']}
df = pd.DataFrame(data)
print(df)

出力

    Name  Age Gender
0    Tom   28      M
1   Jack   34      M
2   Mary   29      F
3  Ricky   42      F

方法1:pd.concat()とignore_indexを組み合わせる

最も一般的で安全な方法は、追加したい行を新しいDataFrameとして作成し、既存のDataFrameと連結したうえでインデックスを振り直すことです。ignore_index=Trueを指定すると、連結後にインデックスが自動的に0から採番し直されるため、新しい行が先頭に配置されます。

import pandas as pd

data = {'Name': ['Tom', 'Jack', 'Mary', 'Ricky'],
        'Age': [28, 34, 29, 42],
        'Gender': ['M', 'M', 'F', 'F']}
df = pd.DataFrame(data)

# 先頭に追加したい行をDataFrameとして作成
top_row = pd.DataFrame({'Name': ['Lavina'], 'Age': [2], 'Gender': ['F']})

# 既存のDataFrameと連結し、インデックスを振り直す
df = pd.concat([top_row, df], ignore_index=True)
print(df)

出力

     Name  Age Gender
0  Lavina    2      F
1     Tom   28      M
2    Jack   34      M
3    Mary   29      F
4   Ricky   42      F

この方法のメリットは、元のデータを一切壊さずに新しい行を挿入できる点です。複数行を一度に先頭へ追加したい場合も、top_row側のDataFrameに行を増やすだけで対応できます。

方法2:ilocで先頭行の値を書き換える

DataFrame.iloc[]を使うと、位置を指定して先頭行(インデックス位置0)の値を直接更新できます。以下の例では、先頭行の値をリストで置き換えています。

import pandas as pd

data = {'Name': ['Tom', 'Jack', 'Mary', 'Ricky'],
        'Age': [28, 34, 29, 42],
        'Gender': ['M', 'M', 'F', 'F']}
df = pd.DataFrame(data)

# インデックス位置0(先頭行)の値をリストで上書き
df.iloc[0] = ['Piyu', 7, 'F']
print(df)

出力

    Name  Age Gender
0   Piyu    7      F
1   Jack   34      M
2   Mary   29      F
3  Ricky   42      F

注意:この方法は既存の先頭行を上書きするものであり、厳密には「行の追加」ではなく「行の置き換え」です。そのため、元の先頭行(Tomの行)のデータは失われます。既存の行をすべて残しながら新しい行を先頭に挿入したい場合は、方法1のpd.concat()を使用してください。

まとめ

  • pd.concat() + ignore_index=True:既存データを保持したまま先頭に行を追加できる標準的な方法。
  • df.iloc[0] = 値:先頭行を別の値で置き換えたい場合に使える簡潔な方法。

用途に応じて使い分けることで、DataFrameの行操作を柔軟かつ安全に行えます。

  1. Pandasデータフレームを日付ごとに集計してプロットする方法

    Pandasデータフレームを日付ごとに集計してグラフ化したい場合、groupby()とagg()を組み合わせることで簡単に実現できます。本記事では、Matplotlibを使って集計結果を棒グラフとして可視化するまでの具体的な手順を、サンプルコード付きで解説します。 手順 図のサイズを設定し、サブプロット間およびその周囲のパディング(余白)を調整します。 2次元で、サイズ変更可能、かつ異なるデータ型を含みうる表形式データを持つデータフレーム df を作成します。 groupby() と agg([sum]) を使って、日付ごとに値を集計したデータフレームを取得します。 kind=bar を指定

  2. Pandas DataFrameのすべての行に関数を適用する方法

    Pandasでデータを加工する際、DataFrameのすべての行に対して同じ処理を一括で適用したいケースはよくあります。そんなときに便利なのが apply() メソッドです。axis=1 を指定することで、行方向に関数を適用できます。本記事では、ラムダ式とユーザー定義関数の2つの方法を具体的なコード例とともに解説します。 ラムダ関数を各行に適用する 最も手軽なのは、ラムダ式(無名関数)を apply() に渡す方法です。簡単な演算処理なら、わざわざ関数を定義せずに1行で書けます。 例 import pandas as pd df = pd.DataFrame([(10, 3, 13), (0