Pythonで表のかたちをしたデータを扱うとき*pandasのDataFrame(データフレーム)がとても便利です。でも、はじめて使う人からは、よくこんな質問があります:
- 「列を追加したいけど、どうやるの?」
- 「いらない行を削除したい」
- 「データの一部を変更するにはどうしたらいい?」
この記事では、列や行の追加・削除・変更の方法を、たくさんのコード例と一緒に説明します!
準備:pandasのインポートとサンプルDataFrame
まずは、pandasを読み込んで、練習用のデータを作りましょう。
コード例
import pandas as pd
# 練習用のデータを作る
data = {
'名前': ['田中', '鈴木', '佐藤'],
'年齢': [28, 34, 22],
}
df = pd.DataFrame(data)
print(df)
結果
名前 年齢
0 田中 28
1 鈴木 34
2 佐藤 22
これで、3人分のデータが入った表ができました。この表を使って、いろいろな操作を学んでいきます。
列の追加方法

既存の値を使って新しい列を作る
年齢を見て、30歳以上なら「30代」、それ以外なら「20代」という列を追加してみましょう。
コード例
df['年齢カテゴリ'] = df['年齢'].apply(lambda x: '30代' if x >= 30 else '20代')
print(df)
結果
名前 年齢 年齢カテゴリ
0 田中 28 20代
1 鈴木 34 30代
2 佐藤 22 20代
すべての行に同じ値を入れる
全員が同じ部署に所属している場合、こんなふうに列を追加できます。
コード例
df['所属'] = '営業部'
print(df)
結果
名前 年齢 年齢カテゴリ 所属
0 田中 28 20代 営業部
1 鈴木 34 30代 営業部
2 佐藤 22 20代 営業部
他の列と計算して追加
年齢に5を足した値の列を作ってみましょう。
コード例
df['年齢+5'] = df['年齢'] + 5
print(df)
行の追加方法

locを使って1行追加する
新しい人のデータを1行追加してみましょう。
コード例
df.loc[3] = ['山本', 26, '20代', '営業部', 31]
print(df)
結果
名前 年齢 年齢カテゴリ 所属 年齢+5
0 田中 28 20代 営業部 33
1 鈴木 34 30代 営業部 39
2 佐藤 22 20代 営業部 27
3 山本 26 20代 営業部 31
pd.concat()を使って行を追加する(推奨方法)
新しいDataFrameを作って、元のデータと結合する方法です。
コード例
# 新しい行のデータを作る
new_row = pd.DataFrame([['加藤', 40, '40代', '総務部', 45]],
columns=df.columns)
# 元のデータと結合する
df = pd.concat([df, new_row], ignore_index=True)
print(df)
ポイント:append()
という方法もありましたが、新しいバージョンのpandasでは使えなくなりました。pd.concat()
を使いましょう。
列の削除方法

1つの列を削除する
不要になった列を削除してみましょう。
コード例
df = df.drop('年齢+5', axis=1)
print(df)
説明:axis=1
は「列方向」という意味です。axis=0
だと「行方向」になります。
複数の列を削除する
いくつかの列をまとめて削除することもできます。
コード例
df = df.drop(['所属', '年齢カテゴリ'], axis=1)
print(df)
結果
名前 年齢
0 田中 28
1 鈴木 34
2 佐藤 22
3 山本 26
4 加藤 40
行の削除方法
インデックス番号で削除する
特定の行番号を指定して削除します。
コード例
df = df.drop(1) # 1番目の行(鈴木さん)を削除
print(df)
結果
名前 年齢
0 田中 28
2 佐藤 22
3 山本 26
4 加藤 40
条件で削除する
30歳未満の人だけを残して、それ以外を削除してみましょう。
コード例
df = df[df['年齢'] < 30]
print(df)
結果
名前 年齢
0 田中 28
2 佐藤 22
3 山本 26
値の変更方法

特定のセルを変更する
田中さんの年齢を29歳に変更してみましょう。
コード例
df.at[0, '年齢'] = 29
print(df)
結果
名前 年齢
0 田中 29
2 佐藤 22
3 山本 26
条件に合う値をまとめて変更する
佐藤さんの年齢を23歳に変更してみましょう。
コード例
df.loc[df['名前'] == '佐藤', '年齢'] = 23
print(df)
結果
名前 年齢
0 田中 29
2 佐藤 23
3 山本 26
行・列の名前を変更する
列名を変更する
列の名前をより分かりやすくしてみましょう。
コード例
df = df.rename(columns={'名前': '氏名', '年齢': '年齢(歳)'})
print(df)
行のインデックスを変更する
行番号を文字に変更することもできます。
コード例
df.index = ['a', 'b', 'c']
print(df)
よくあるエラーと対処法
KeyError: '列名'が出たとき
原因:存在しない列名を指定している
対処法:df.columns
で列名を確認しましょう
コード例
print(df.columns) # 列名の一覧を表示
SettingWithCopyWarningが出たとき
原因:元のDataFrameの一部を切り取ったデータを変更しようとしている
対処法:.copy()
を使って明確にコピーを作りましょう
コード例
df_copy = df[df['年齢'] < 30].copy()
df_copy.loc[0, '年齢'] = 25 # これなら警告が出ない
ValueError: Length mismatchが出たとき
原因:行や列を追加するときの値の数が合っていない
対処法:追加する値の数が、列の数と同じになっているか確認しましょう
まとめ:DataFrameの操作は練習すれば必ずできる!
DataFrameを自由に操作できるようになると、データの前処理・分析・表示の幅がとても広がります。列・行の「追加・削除・変更」は特によく使うので、しっかりと基本をマスターしましょう。
操作方法の一覧表
操作 | 方法 | 補足 |
---|---|---|
列の追加 | df['列名'] = 値 | 計算・条件分岐・定数などに対応 |
行の追加 | loc[] , pd.concat() | append() は使えなくなった |
列の削除 | drop('列名', axis=1) | inplace=False がデフォルト |
行の削除 | drop(インデックス) / 条件抽出 | 条件で絞るとスマート |
値の変更 | at[] , loc[] | 条件変更も便利 |
名前変更 | rename() , df.index | 分かりやすいラベル付けに |
コメント