トップ7の列操作でより効果的にPandasデータフレームを使用する

7つのPandasデータフレームの列操作で効果的に利用する方法

Pandas列操作のトップ7を異なる方法で実行するための完全ガイド

AlanによるPixabayの画像

データ分析において、Pandasはデータの操作と機械学習のためのデータの準備を行うために最も使用されるPythonライブラリです。

実際、Pandasは非常に柔軟なライブラリであり、ファイル形式の変換にも使用できます。

しかし、私たちは毎日Pandasの何かを行うためにGoogle検索をする時間がかかります。

私は知っています、あなたを捕まえました!

しかし、正直に言いましょう:いくつかの機能は覚えにくいです。異なる方法で同じ目標に到達することができるためかもしれません。ですので、毎日同じことをGoogleで検索しても恥ずかしくはありません。

ただし、時間を節約するのは常に良いアイデアです。そのため、この記事では、Pandasの列を操作するためのトップ7の機能を紹介します。これにより、もうGoogleで検索する必要はありません。この記事を保存して(ブックマークすることで)、必要な時に戻ってくるだけで済みます。

ここでは以下の内容が見つかります:

目次:新しいPandasの列を作成する方法Pandasデータフレームに新しい列を追加する方法Pandasの列の名前を変更する方法Pandasの列を削除する方法Pandasの列の一意の値を見つける方法Pandasの列をリストに変換する方法Pandasデータフレームを列でソートする方法

新しいPandasの列を作成する方法

まず、Pandasの列はPandasシリーズとも呼ばれます。つまり、PandasデータフレームはPandasシリーズの順序付きコレクションです。

新しいPandasの列を作成する方法にはいくつかの方法があります。すべて見てみましょう。

Pandasシリーズとして新しいPandasの列を作成する

Pandasの列を「単独で存在する」と考える場合、Pandasシリーズのメソッドを使用して作成するのが正しい方法です:

# パンダシリーズを作成しますseries = pd.Series([6, 12, 18, 24])# パンダシリーズを表示しますprint(series)>>>  0     6  1    12  2    18  3    24  dtype: int64

「正しい方法」と言ったのは、先述したように、Pandasの列はPandasシリーズであるためです。したがって、単一の列が必要な場合は、この方法を使用すると「正式に正しい」ことになります。

Pandasデータフレームとして新しいPandasの列を作成する

ただし、実際には、個別に列が必要なことはあまりありません。

したがって、Pandasの列を作成する別の方法は、単一の列だけを持つ新しいPandasデータフレームを作成することです。これにより、後から他の列を追加することができます。

次のようにすることができます:

import pandas as pd# パンダデータフレームとしてパンダの列を作成しますdf = pd.DataFrame({'A': [1, 2, 3, 4]})# パンダデータフレームを表示しますprint(df)>>>     A  0  1  1  2  2  3  3  4

したがって、前の例との違いは、この場合、Pandasの列にも名前が付いていることです。この場合、私たちはそれを「A」と呼びました。

注:ここで行ったことをより詳しく見ると、Pandasデータフレームを辞書として作成できることがわかります。実際、"A"はキーであり、コロンで値のリストと区切られています。そして、キーと値は両方とも波括弧の中にあります。

NumPy配列を使ってPandasのデータフレームとしてPandasの列を作成する

Pandasのスーパーパワーの一つは、NumPy配列を入力値として「受け入れる」ことができることです。つまり、NumPy配列からデータフレームを作成することができます。

単一の列の場合、1次元配列を作成してそれをデータフレームに変換することができます。これにより、1つの列を持つデータフレームが作成されます。

以下のように行うことができます:

import numpy as npimport pandas as pd# NumPy配列を作成values = np.array([5, 10, 15, 20])# 配列をPandasのデータフレームに変換df = pd.DataFrame(values)# データフレームを表示print(df)>>>    00   51  102  153  20

Pandasのデータフレームに新しい列を追加する方法

Pandasのデータフレームに新しい列を追加する可能性は、新しい列の作成と何らかの関連があります。

ここで言っているのは、まずPandasのデータフレームを作成し、次に単一のPandasの列を作成し、それから列をデータフレームに追加する必要があるということです。

この場合も、複数の方法があります。それをすべて見てみましょう。

Pandasのデータフレームに新しい列を追加する:標準的な方法

Pandasのデータフレームに新しい列を追加する標準的な方法は、データフレームを作成し、別の列を作成し、それをデータフレームに追加することです。

以下のように行うことができます:

import pandas as pd# データフレームを作成df = pd.DataFrame({'A': [1, 2, 3, 4]})# 新しい列を値のリストを使用して作成df['B'] = [20, 30, 40, 50]# データフレームを表示print(df)>>>   A   B0  1  201  2  302  3  403  4  50

したがって、私たちがステップバイステップで行ったことを分析してみましょう:

  1. pd.DataFrame()メソッドを使用してPandasのデータフレームを作成しました。
  2. df['B']として新しい列を作成し、この新しい列を「B」と呼んでいます。
  3. 数値のリストを使用して、新しく作成された列に値を割り当てました。

では、新しい列を作成する別の方法は何でしょうか?それは、既にデータフレームがある場合に数値のリストを使用する方法です。

Pandasのデータフレームに新しい列を追加する:関数の適用

既存のデータフレームに新しい列を作成して追加する標準的な方法の力を使うと、1行のコードで新しい列を作成し、既存のデータフレームに追加することができます。

たとえば、既存の列を組み合わせた2つの新しい列を作成したいとします。次のように既存の列に関数を適用することで、それを行うことができます:

import pandas as pd# データフレームを作成df = pd.DataFrame({'A': [1, 2, 3, 4]})# 列Aの値を2倍にした列Bを作成df['B'] = df['A'] * 2# 列Aにラムダ関数を適用して列Cを作成df['C'] = df['A'].apply(lambda x: x ** 2)# データフレームを表示print(df)>>>   A  B   C0  1  2   11  2  4   42  3  6   93  4  8  16

したがって、以下のことを行いました:

  1. Pandasの列(「A」)をデータフレームとして作成しました。
  2. 列「A」の値を2倍にした列「B」を作成しました。
  3. 列「A」にラムダ関数を適用して列「C」を作成しました。具体的には、この場合、列「A」の値を2乗しています。

これらの列はすべて、一意のデータフレームに格納されています。

Pandasデータフレームに新しい列を追加する:Pandasシリーズまたは単一のPandas列を使用して

もちろん、Pandasデータフレームには、列がPandasシリーズまたはPandasデータフレームである場合でも、列を追加できます。

次に、それを行う方法を示します:

import pandas as pd# データフレームを作成df = pd.DataFrame({'A': [1, 2, 3, 4]})# pd.Series()を使用して新しい列を作成values = pd.Series([5, 10, 15, 20]) # シリーズを作成df['B'] = values # データフレームにシリーズを列として追加# データフレームを表示print(df)>>>   A   B0  1   51  2  102  3  153  4  20

したがって、上記の場合は、Pandasシリーズを作成し、それに名前を付けて既存のデータフレームに追加しました。

Pandasデータフレームとして作成されたPandas列の場合、次のようになります:

import pandas as pd# データフレームを作成df = pd.DataFrame({'A': [1, 2, 3, 4], 'B': [5, 6, 7, 8]})# データフレームとしてPandas列を作成df['C'] = pd.DataFrame({'C': [9, 10, 11, 12]})# データフレームを表示print(df)>>>   A  B   C0  1  5   91  2  6  102  3  7  113  4  8  12

ここまでです。

注:もちろん、同じ手法はNumPy配列として列を作成する場合にも適用できます。 "the game" は明確になったため、ここではこの方法を示しません。

Pandasで列の名前を変更する方法

Pandasの列(または複数の列)の名前を変更することは、私たちがしばしば行う典型的な日常業務ですが、覚えられないこともよくあります。

また、この場合も、それを行うためのさまざまな方法があります。すべて見てみましょう。

Pandasカラムを変更する方法:rename()メソッド

次のように、rename()メソッドを使用してPandasの列の名前を変更できます:

import pandas as pd# データフレームを作成df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})# 単一の列の名前を変更df = df.rename(columns={'A': 'NewA'})# データフレームを表示print(df)>>>     NewA  B0     1    41     2    52     3    6

したがって、辞書を使用しているかのようです。実際には、rename()メソッドの内部では、columns引数を渡し、実際の名前と新しい名前を波括弧で区切ってコロンで区切って指定する必要があります。辞書のように行う方法です。

もちろん、次のようにして複数の列の名前を変更することもできます:

import pandas as pd# データフレームを作成df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})# 複数の列の名前を変更df = df.rename(columns={'A': 'NewA', 'B': 'NewB'})# データフレームを表示print(df)>>>    NewA  NewB0     1     41     2     52     3     6

そして、これも辞書と同様です。

Pandasカラムを変更する方法:column属性

1つのPandasカラム(または複数のカラム、後で見るように)を変更するために、columns属性を使用することができます:

import pandas as pd# データフレームの作成df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})# 全ての列名を変更df.columns = ['NewA', 'NewB']# データフレームを表示print(df)>>>    NewA  NewB0     1     41     2     52     3     6

したがって、この場合、columns属性を使用して、列名を文字列のリストで変更することができます。

Pandasの列名を変更する方法:set_axis()メソッド

1つまたは複数のPandasの列名を変更するには、set_axis()メソッドを使用することができます。

import pandas as pd# データフレームの作成df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})# 全ての列名を変更df.set_axis(['NewA', 'NewB'], axis=1, inplace=True)# データフレームを表示print(df)>>>     NewA  NewB0     1     41     2     52     3     6

したがって、この場合も、列名を文字列のリストで変更しますが、set_axis()メソッドでは軸をゼロから設定するため、パラメータaxis=1およびinplace=Trueを渡す必要があります。これにより、このメソッドは列名を変更できます。

Pandasの列名を変更する方法:ラムダ関数を使用する

Pandasの列名のように文字列を扱う必要がある場合、テキストの文字を変更するためにラムダ関数を使用することができます。

たとえば、列名を文字を小文字に変更したい場合、次のようにします:

import pandas as pd# データフレームの作成df = pd.DataFrame({'COLUMN_1': [1, 2, 3], 'COLUMN_2': [4, 5, 6]})# ラムダ関数を使用して列名を変更df = df.rename(columns=lambda x: x.lower())  # 列名を小文字に変更# データフレームを表示print(df)>>>      column_1  column_20         1         41         2         52         3         6

以上です。

Pandasの列を削除する方法

Pandasの列(または複数の列)を削除することは、非常に頻繁に行う必要があるタスクの1つです。値が重要でないため、値がすべてNULLであるため、または他の理由であるかもしれません。

このタスクを実行するためには、2つのメソッドがあります。両方を見てみましょう。

Pandasの列を削除する方法:drop()メソッドを使用する

Pandasの列(または複数の列)を削除するための典型的な方法は、drop()メソッドを使用することです。

ここで心に留めておくべきことは、いくつかの列を削除して新しいデータフレームを作成するか、それらを削除して現在のデータフレームを置き換えるかを決めることです。

違いを示します:

import pandas as pd# データフレームの作成df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})# 1つの列を削除して現在のデータフレームを置き換えるdf = df.drop('A', axis=1)# 更新されたデータフレームを表示print(df)>>>   B  C0  4  71  5  82  6  9

したがって、drop()メソッドを使用して列”A”を削除し、削除したい列の名前と軸(Pandasではaxis=1は垂直方向を示し、指定する必要があります)を指定しました。

この場合、データフレームdfを置き換えることにしました。したがって、プロセスの最後には、データフレームdfには「A」という列がありません。

代わりに、別のデータフレームを作成したい場合、例えばdf_2と呼ぶことにしましょう。以下のように行う必要があります:

import pandas as pd# データフレームの作成df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9], 'D': [10, 11, 12]})# 1つの列を削除し、現在のデータフレームを置き換えるdf_2 = df.drop(['A', 'D'], axis=1)# 新しいデータフレームを表示するprint(df_2)>>>   B  C0  4  71  5  82  6  9

したがって、この場合、2つの列を削除し、列「B」と「C」のみを持つ新しいデータフレームを作成しました。

これは、将来的な追加の分析のために元のデータフレームdfが必要になる可能性がある場合に役立つかもしれません。

Pandasの列を削除する方法:列のインデックスを使用する

Pandasでは、インデックスを使用して列を単独で取り出すことができます。これは、次のようにしてインデックスを使用して列を削除することができます:

import pandas as pd# データフレームの作成df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9], 'D': [10, 11, 12]})# 1つの列を削除し、新しいデータフレームに追加するdf_2 = df.drop(df.columns[[0, 1]], axis=1)# 新しいデータフレームを表示するprint(df_2)>>>   C    D0  7   101  8   112  9   12

したがって、この場合、列「C」と「D」のみを持つ新しいデータフレームを作成し、列「A」と「B」をインデックスを使用して削除しました。

Pythonでは0から数え始めることを覚えておく必要があります(つまり、最初の列はインデックス0であり、列「A」です)。これにより、削除したい列(または複数の列)を数える必要があるため、この方法は複数の列がある場合には最適ではないかもしれません。列の数え方に誤りが生じる可能性があるからです。

Pandasの列内の一意の値を見つける方法

Pandasの列内の一意の値を見つけるというタスクは、重複した値を特別な方法で処理する必要があるため、日常的に実行する必要がある場合があります。

この場合も、2つの方法があります。1つは列内の重複を表示し、もう1つはそれらを削除する方法です。

どちらの方法も見てみましょう。

Pandasの列内の一意の値を見つける方法:value_counts()メソッドを使用して重複を見つける

Pandasの列に重複した値があるかどうかを確認し、それらがいくつあるかも見たい場合は、次のようにvalue_counts()を使用することができます:

import pandas as pd# データフレームの作成df = pd.DataFrame({'A': [1, 2, 3, 1, 3], 'B': [4, 5, 6, 7, 8,], 'C': [7, 8, 9, 10, 11]})# Pandasの列内の一意の値を見つけるunique_values = df['A'].value_counts()# 一意の値を表示するprint(unique_values)>>>1    23    22    1Name: A, dtype: int64

したがって、ここでは結果は次のようになります:

  1. 列の名前は「A」であり、すべての型は「int64」です。
  2. 1が2つあります。
  3. 3が2つあります。
  4. 2が1つあります。

したがって、それは私たちに値を示し、私たちが興味のある列にいくつの値が存在するかを教えてくれます。

Pandasの列で一意の値を見つける方法:drop_duplicates()メソッドを使用して重複を削除する

重複する値をPandasの列から削除したい場合(重複があることを知っている場合)、次のようにdrop_duplicates()メソッドを使用できます:

import pandas as pd# データフレームを作成df = pd.DataFrame({'A': [1, 2, 3, 1, 3], 'B': [4, 5, 6, 7, 8,],       'C': [7, 8, 9, 10, 11]})# Pandasの列から重複値を削除unique_values = df['A'].drop_duplicates()# 一意の値を表示print(unique_values)>>>0    11    22    3

したがって、「A」の列から重複を削除し、unique_valuesという新しいPandasの列を作成しました。

Pandasの列で一意の値を見つける方法:データフレームの研究

この時点で、「大きなデータフレームに数十の列がある場合、どの列が重複しているかを正確に知る方法は?」と思うかもしれません。

良い質問です!私たちができることは、まずデータフレーム全体を調べることです。

たとえば、どの列に重複があるかを確認したい場合、次のように行います:

import pandas as pd# 重複を含むデータフレームを作成df = pd.DataFrame({'A': [1, 2, 2, 3, 4, 4], 'B': [5, 6, 6, 7, 8, 8]})# データフレームに重複があるかどうかをチェックhas_duplicates = df.duplicated().any()# 結果を表示print(has_duplicates)>>>True

したがって、このコードは、重複する列がある場合には「True」を返し、ない場合には「False」を返します。

そして、実際に重複している列の名前を知りたい場合はどうでしょうか?次のように行います:

import pandas as pd# 重複を含むデータフレームを作成df = pd.DataFrame({'A': [1, 2, 2, 3, 4, 4], 'B': [5, 6, 6, 7, 8, 8]})# 重複行を見つけるduplicate_rows = df.duplicated()# 重複行を表示print(df[duplicate_rows])>>>   A  B2  2  65  4  8

したがって、上記のコードは以下を示しています:

  • 重複している列。
  • 重複している値。

これで、value_counts()メソッドで詳細を調査したり、drop_duplicates()メソッドでそれらを削除したりできます。

Pandasの列をリストに変換する方法

Pandasの列をリストに変換することは、Pandasの列から値を「分離」してリストに入れる可能性を与えてくれる便利な機能です。その後、リストで必要なことを何でも行うことができます(反復処理など)。

この変換を行うためには2つの可能性があります。

Pandasの列をリストに変換する方法:list()メソッドを使用する

list()メソッドは、iterableオブジェクトをリストに変換する組み込みのPython関数です。次のように使用できます:

import pandas as pd# データフレームを作成df = pd.DataFrame({'A': [1, 2, 3, 1, 3], 'B': [4, 5, 6, 7, 8,],    'C': [7, 8, 9, 10, 11]})# Pandasの列をリストに変換column_list = list(df['B'])# リストを表示print(column_list)>>>[4, 5, 6, 7, 8]

したがって、私たちは簡単に値を抽出し、リストに入れることができました。

Pandasの列をリストに変換する方法:to_list()メソッドを使用する

同じ結果を得るために、Pandasのto_list()メソッドを使用することができます。ただし、注意が必要です:Pandasのバージョン1.2.0以降で利用可能です

次のように使用できます:

import pandas as pd# DataFrameの作成df = pd.DataFrame({'A': [1, 2, 3, 1, 3], 'B': [4, 5, 6, 7, 8,],      'C': [7, 8, 9, 10, 11]})# Pandasの列をリストに変換column_list = df['B'].to_list()# リストを表示print(column_list)>>>[4, 5, 6, 7, 8]

そして、もちろん、以前と同じ結果が得られました。

列に基づいてPandasのデータフレームをソートする方法

列をソートする必要がある状況はたくさんあります。ソートとは、データを昇順または降順に並べ替えることを意味します。

以下のメソッドを使用してこの目標を達成することができます。

列に基づいてPandasのデータフレームをソートする方法:sort_values()メソッドを使用する

列に基づいてPandasのデータフレームをソートするには、次のようにsort_values()を使用することができます:

import pandas as pd# DataFrameの作成df = pd.DataFrame({'A': [10, 2, 7, 1, 15], 'B': [4, 2, 6, 28, 8,],    'C': [7, 1, 9, 10, 19]})# Aを昇順でdfをソートdf.sort_values('A', ascending=True, inplace=True)# ソートされたデータフレームを表示print(df)>>>    A   B   C3   1  28  101   2   2   12   7   6   90  10   4   74  15   8  19

このように、データフレームは列「A」を昇順でソートされました。実際には、次のことを確認すると:

  • 元のデータフレームでは、列「A」の数値1は4番目の位置にあります。列「B」の数値28も4番目の位置にあります。
  • ソートされたデータフレームでは、列「A」の数値1は最初の位置にあります。列「B」の数値28も最初の位置にあります。

したがって、データフレームをソートすることで、列の値の関係性は失われません。

このメソッドの非常に便利な機能の1つは、NaNを最初の値として列をソートできることです。次のように行うことができます:

import pandas as pd# DataFrameの作成df = pd.DataFrame({'A': [10, 0, 0, 1, 15], 'B': [4, 2, 6, 28, 8,],    'C': [7, 1, 15, 10, 19]})# NaNを先頭にソートdf.sort_values('A', ascending=True, inplace=True)# ソートされたデータフレームを表示print(df)>>>    A   B   C1   0   2   12   0   6  153   1  28  100  10   4   74  15   8  19

以上です。

列に基づいてPandasのデータフレームをソートする方法:sort_index()メソッドを使用する

次のように、インデックス値に基づいてデータフレームをソートすることもできます:

import pandas as pd# データフレームの作成df = pd.DataFrame({'A': [10, 2, 7, 1, 15], 'B': [4, 2, 6, 28, 8,],    'C': [7, 1, 9, 10, 19]})# インデックスを昇順にソートdf.sort_index(inplace=True)# ソートされたデータフレームを表示するprint(df)>>>    A   B   C0  10   4   71   2   2   12   7   6   93   1  28  104  15   8  19

そして、私たちはインデックスが順番に並んでいることがわかります(昇順)。

結論

この記事では、私たちがほとんど毎日実行するPandasの列に対するトップ7の操作を見てきました。

このガイドは、それを保存すると多くの時間を節約できるようになるので、もうGoogleで検索する必要がなくなります。

無料のPythonの電子書籍:

Pythonのデータサイエンスを学び始めましたが、苦労していますか? 私のニュースレターに登録して無料の電子書籍を入手してください:これは、Pythonのデータサイエンスを実践的な経験を積みながら学ぶための正しい学習パスを提供します。

ストーリーを楽しんだ?私の紹介リンクを通じて5ドル/月でVoAGIのメンバーになってください:追加料金はかかりませんが、私は少しの手数料を受け取ります:

VoAGIのメンバーとして、あなたの会費の一部はあなたが読んだ作家に送られ、すべてのストーリーに完全アクセスできます…

federicotrotta.medium.com

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more