パンダのLOCとILOC:パンダのLOCとILOCの違い
公開: 2020-08-01目次
パンダのLocとiloc
新しいPython開発者の間で混乱する一般的な原因は、locとilocです。 それらは両方とも非常に類似しているように見え、類似したタスクを実行します。 したがって、これはすべての学生を困惑させる可能性があります。
ilocとlocの違いを知りたい場合は、適切な場所に来ました。この記事では、このトピックについて詳しく説明します。 これらの機能の主な違いを見つけて、概念をよりよく理解するためにそれらが実際に動作していることを確認します。 パンダの詳細については、データサイエンスコースをご覧ください。
始めましょう。
locとilocの違い
1.Pythonのiloc
Pythonでilocを使用して選択できます。 これは整数位置ベースであり、位置で選択するのに役立ちます。 したがって、インデックス5の行を検索する場合、ilocは、名前やラベルに関係なく、データフレームの5番目の行を表示します。
Pythonでのilocの例を次に示します。
>>> mydict = [{'a':1、'b':2、'c':3、'd':4}、
…{'a':100、'b':200、'c':300、'd':400}、
…{'a':1000、'b':2000、'c':3000、'd':4000}]
>>> df = pd.DataFrame(mydict)
>>> df
あいうえお
0 1 2 3 4
1100200300400
2 1000 2000 3000 4000
上記のデータフレームにiloc関数を使用して、スカラー整数で行にインデックスを付けます。
>>> type(df.iloc [0])
<クラス'pandas.core.series.Series'>
>>> df.iloc [0]
a 1
b 2
c 3
d 4
名前:0、dtype:int64
2.パンダの場所
パンダでlocを使用すると、ラベルを使用して複数の行と列にアクセスできます。 ただし、ブール配列でも使用できます。
locを使用してインデックス5の行を検索した場合、5番目の行は取得されません。 代わりに、「5」という名前の行のみが取得されます。
パンダのlocの例を次に示します。
>>> df = pd.DataFrame([[1、2]、[4、5]、[7、8]]、
…index=['cobra'、'viper'、'sidewinder']、
…columns=['max_speed'、'shield'])
>>> df
max_speedシールド
コブラ12
バイパー45
サイドワインダー78
上記は、行を抽出するテーブルです。
>>> df.loc ['viper']
max_speed 4
シールド5
名前:viper、dtype:int64
locとilocの詳細な例
これらの関数の両方を選択に使用しますが、それらの違いを理解するために詳細な例について説明するのが最善です。
この例では、kaggleで利用できる電話会社の顧客データセットを使用します。 これをデータフレームに追加します。
df = pd.read_csv(“ Projects / churn_prediction / Telco-Customer-Churn.csv”)
df.head()
ID | 性別 | シニアシチズン | 相棒 | 扶養家族 | 在職期間 | 電話 | MultipleLines | インターネット | 安全 | |
0 | 7590-VHVEG | 女性 | 0 | はい | 番号 | 1 | 番号 | 電話なし | DSL | 番号 |
1 | 5575-GNVDE | 男 | 0 | 番号 | 番号 | 34 | はい | 番号 | DSL | はい |
2 | 3668-QPYBK | 男 | 0 | 番号 | 番号 | 2 | はい | 番号 | DSL | はい |
このデータセットには21列あります。 デモンストレーションの目的でいくつかだけ示しました。 すでに説明したように、locを使用してラベルでデータを選択します。 ここで、列の名前は、性別、在職期間、OnlineSecurityなどの列ラベルです。 それらはすべて列名であり、ラベルでもあります。
特定のインデックスを割り当てていないため、パンダはデフォルトで行の整数インデックスを作成します。 行ラベルは整数で、0から始まり上に向かっていきます。 この例では、locとilocの動作がどのように異なるかを確認します。
- 行「1」と列「パートナー」を選択します
df.loc [1、'パートナー']
出力:'いいえ'
これは、行「1」の「パートナー」列に存在する値を示しています。
- 行ラベル「4」と列「customerID」および「gender」を選択します
df.loc [:4、['customerID'、'gender']]
顧客ID | 性別 | |
0 | 7590-VHVEG | 女性 |
1 | 5575-GNVDE | 男 |
2 | 3668-QPYBK | 男 |
3 | 7795-CFOCW | 男 |
4 | 9237-HQITU | 女性 |
- 行ラベル「1」、「2」、「3」、および「依存関係」列を選択します
df.loc [[1,2,3]、'扶養家族']
1いいえ
2いいえ
3いいえ
名前:扶養家族、dtype:オブジェクト
今回は、データフレームをフィルタリングし、ilocまたはlocを適用します。
- パートナーを持つ顧客の「10」列と「PhoneService」列および「InternetService」列の行ラベルを選択します(パートナーは「yes」である必要があります)
df [df.Partner =='はい']。loc:10、['PhoneService'、'InternetService']]
上記の場合、データベースにフィルターを適用しましたが、インデックスを変更しなかったため、出力では、フィルターに必要な行の複数のラベルが省略されていました。 そこで、ここでloc [:10]を使用して、「10」までのラベルを持つ行を選択しました。
一方、ここでilocを使用してフィルターを適用すると、ラベルに関係なく、ilocが位置によって選択するときに10行が取得されます。 iloc [:10]を適用した場合の結果は次のとおりです。

df [df.Partner =='はい']。iloc[:10、[6,8]]
PhoneService | インターネットサービス | |
0 | 番号 | DSL |
8 | はい | 光ファイバー |
10 | はい | DSL |
12 | はい | 光ファイバー |
15 | はい | 光ファイバー |
18 | はい | DSL |
21 | はい | 番号 |
23 | はい | DSL |
24 | はい | DSL |
26 | はい | 光ファイバー |
列を選択するには、メソッドを変更する必要があることに注意してください。
読む: Pythonパンダチュートリアル
- ilocで最初の5列と最初の5行を選択します
df.iloc [:4、:4]
顧客ID | 性別 | 高齢者 | 相棒 | |
0 | 7590-VHVEG | 女性 | 0 | はい |
1 | 5575-GNVDE | 男 | 0 | 番号 |
2 | 3668-QPYBK | 男 | 0 | 番号 |
3 | 7795-CFOCW | 男 | 0 | 番号 |
ilocを使用して、最後から位置を選択できます。 そのためには、負の整数(-1、-2など)を使用して、それらから始める必要があります。
- 最後の5列と最後の5行を選択します
df.iloc [-5:、-5:]
PaperlessBilling | 支払方法 | 月額料金 | 総料金 | チャーン | |
7038 | はい | 郵送小切手 | 84.80 | 1990.5 | 番号 |
7039 | はい | クレジットカード | 103.20 | 7362.9 | 番号 |
7040 | はい | 電子小切手 | 29.60 | 346.45 | 番号 |
7041 | はい | 郵送小切手 | 74.40 | 306.6 | はい |
7042 | はい | 銀行振込 | 105.65 | 6844.5 | 番号 |
ilocでもラムダ関数を使用できます。 (ラムダ関数はPythonの小さな無名関数であり、単一の式を使用できますが、引数はいくつでも使用できます)
- 15行目までの3行ごとに選択し、「インターネットサービス」列と「パートナー」列のみを表示します
df.iloc [lambda x:(x.index x 3 == 0)&(x.index <= 150] ['Partner'、'InternetService']]
相棒 | インターネットサービス | |
0 | はい | DSL |
3 | 番号 | DSL |
6 | 番号 | 光ファイバー |
9 | 番号 | DSL |
12 | はい | 光ファイバー |
15 | はい | 光ファイバー |
間にあるラベルや位置を選択することもできます。
- 4〜6の列の位置、および20〜25の行の位置を選択します
df.iloc [20:25、4:6]
扶養家族 | 在職期間 | |
20 | 番号 | 1 |
21 | 番号 | 12 |
22 | 番号 | 1 |
23 | 番号 | 58 |
24 | 番号 | 49 |
これで、ラベルをilocに渡そうとすると、Pandasは次のエラーメッセージを表示します。
ValueError:ロケーションベースのインデックス作成は、[整数、整数スライス(STARTポイントはINCLUDED、ENDポイントはEXCLUDED)、整数のリストライク、ブール配列]タイプのみを持つことができます
位置をlocに渡すと、同様のエラーが発生します。
また読む:パンダのインタビューの質問
Pythonの詳細
生徒は質問をし、答えを見つける必要があります。 この記事がPandasのloc(またはPythonのiloc)に関する質問に答えてくれることを願っています。 これらの関数をさまざまなデータセットで自分で試して、それらがどのように機能するかを理解するのが最善です。
Python、Pandas、および関連トピックについて詳しく知りたい場合は、ブログにアクセスしてください。 私たちの専門家はそこに複数の詳細なリソースを追加します。
データサイエンスについて知りたい場合は、IIIT-B&upGradのデータサイエンスのエグゼクティブPGプログラムをチェックしてください。これは、働く専門家向けに作成され、10以上のケーススタディとプロジェクト、実践的なハンズオンワークショップ、業界の専門家とのメンターシップを提供します。1業界のメンターとの1対1、400時間以上の学習、トップ企業との仕事の支援。
Pandas DataFrameの行を追加するにはどうすればよいですか?
DataFrameに行を挿入するには、loc、iloc、およびixコマンドを使用できます。
1. locは、主にインデックスのラベルに使用されます。 loc 4に挿入すると、インデックスが4のDataFrameエントリを探していることを示していると理解できます。
2. ilocは主に、インデックス内の場所を見つけるために使用されます。 これは、iloc 4に挿入する場合と同じです。これは、インデックス4に存在するDataFrameエントリを検索していることを示します。
3.インデックスが整数ベースの場合、ラベルをixに渡すため、ixの場合は複雑です。 ix 4は、インデックスが4の値をDataFrameで検索していることを示しています。
PythonのPandasのコンテキストでのインデックスの再作成とは何ですか?
DataFrameの行と列のラベルは、インデックスを再作成すると変更されます。 「インデックスの再作成」という用語は、単一の軸に沿ってデータを特定のラベルのセットに揃えるプロセスを指します。 Pandasでは、インデックスの再作成を使用して、DataFrameの行と列のインデックスを変更できます。 多くのpandasシリーズまたはpandasDataFrameに接続された多くのインデックスデータ構造をインデックスで利用できます。
パンダのデータ操作にはどのようなものがありますか?
PandasのDataFrameには、次のようないくつかの重要なデータ操作があります。
1.行と列の選択-行と列の名前を渡すことにより、DataFrame内の任意の行と列を選択できます。 これは1次元になり、DataFrameから選択するとシリーズと見なされます。
2.データフィルタリング-DataFrameでブール式の一部を使用することにより、データをフィルタリングできます。
3. Null値-アイテムにデータが指定されていない場合、アイテムはNull値を受け取ります。 一般にNaNとして表される、異なる列に値を含めることはできません。