【初心者向け】PythonのDataFrameで列・行の追加・削除・変更を行う方法まとめ|pandas基本操作

python

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分かりやすいラベル付けに

コメント

タイトルとURLをコピーしました