HOWTO · Pandas

パンダリバースデータフレーム

行と列を逆にする方法を学び、インデックスをリセットする方法も確認します。 また、初心者が Pandas でデータ フレームを反転しようとすると失敗する理由についても説明します。

行と列を逆にする方法を学び、インデックスをリセットする方法も確認します。 また、初心者が Pandas でデータ フレームを反転しようとすると失敗する理由についても説明します。

loc メソッドを使用して Pandas でエラーなしでデータ フレームを反転する

ここで、コードにジャンプして、pandas ライブラリとデータ セットをインポートします。これは、同じフォルダーにある Excel ファイルからのサンプル スーパーストア データです。 サンプルのスーパーストアを確認すると、複数の列を持つ膨大な量のデータが表示されます。

import pandas as pd

Data = pd.read_excel("demo_Data.xls")
Data.head()

サンプル スーパーストア データ

ここで、理解しやすく、より意味のあるものにするために、いくつかの列を取り上げます。 そのため、まず、データ操作の対象となる列をいくつか選択します。

data = Data[["Category", "Sub-Category", "City", "Country", "Region"]]
data.head()

列を選択

私たちのタスクは、行と列を逆にすることです。最初に、レコードの総数と列の総数を確認します。

len(data), len(data.columns)

出力:

(9994, 5)

データを反転する時が来たので、次のコードを使用してデータ フレームを反転します。

data.loc[::-1]

loc メソッドを使用してデータが反転されていることがわかります。

loc を使用してデータを反転

データ フレームを逆にする方法はわかっていますが、データ フレームのインデックスは 999 から始まるため、インデックスをリセットする必要があります。 そのために、reset_index() メソッドを使用し、drop 引数は True になります。

data.loc[::-1].reset_index(drop=True)

これを実行すると、インデックスがリセットされ、最初のレコードである 9993 が 0 に変更され、すべてのレコードが同じであることがわかります。

インデックスのリセット

先に進んで列を降順に変更すると、最初の列は Region、次に Country のようになります。 これを行うには、上記と同じコードを使用しますが、わずかな変更があります。

data.loc[:, ::-1]

これは、 loc メソッドを使用して列を逆にする方法であり、コンマの後は列を逆にすることを意味し、コンマの前はすべての行を選択することを意味します。

逆列

Python で Pandas データ フレームを逆にする間違った方法

一部の初心者は、データ フレームで reversed() 関数を使用する方法についてあまり知識がないため、データ フレームを誤って反転させてエラーが発生します。

次のコードを検討してください。

data = Data[["Category", "Sub-Category", "City", "Country", "Region"]]

for i in reversed(data):
    print(data["Category"], data["Country"])

出力:

Python で Pandas データ フレームを逆にする間違った方法

初心者が上記のコード スニペットを使用してデータ フレームを逆にするのはなぜですか? さて、reversed() 関数は入れたデータ型を逆にするので、この方法でデータを逆にしようとします。

次のコードを検討してください。

data = ["Category", "Sub-Category", "City", "Country", "Region"]

for i in reversed(data):
    print(i)

データ型がリストであり、データフレームの動作が異なるため、上記のコードが完全に逆になっていることがわかります。

Region
Country
City
Sub-Category
Category

reversed() 関数での Data Fame のワークフロー

reversed() 関数でデータフレームを提供すると、舞台裏でいくつかの実装が行われます。

  1. reversed()len() 関数を呼び出し、データ フレームをその中に入れてその長さを取得します。
  2. range() 関数を呼び出して、その長さを入力します。
  3. 逆の順序で反復を開始します。

reversed() 関数を使用して、コントロールは最初にデータフレームの長さを取得し、次にそれを range() 関数内に配置して、逆の順序で反復を開始します。

その後、コントロールは最初の要素を取得し、data[9993] のように角括弧で囲みます。 ここでエラーが発生します。

また、9993 は列名ではなくインデックスであるため、9993 はデータフレームには存在しません。 上記のセクションで説明した正しいアプローチを使用できます。