[解決済み】ilocとlocはどう違うのですか?
質問
この2つのスライス方法はどう違うのか、どなたか説明してください。
私が見たのは
ドキュメント
,
を見たことがあります。
これら
回答
しかし、この3つがどのように違うのか、まだ理解できていません。私にとっては、この3つは互換性があるように見えますが、それはこの3つがスライシングの低いレベルにあるからです。
たとえば
DataFrame
. この2つの動作はどうなっているのでしょうか?
df.loc[:5]
df.iloc[:5]
どなたか、用途の区別が明確なケースを3つほど提示していただけませんか?
昔々、私もこの2つの機能と
df.ix[:5]
しかし
ix
はpandas 1.0から削除されたので、もうどうでもいい。
解決方法は?
ラベル vs. 所在地
この2つの方法の主な違いは。
-
loc
を持つ行(または列)を取得します。 ラベル . -
iloc
行(または列)を整数で取得します。 場所 .
デモンストレーションのために、次のようなシリーズを考えてみましょう。
s
の文字が、単調でない整数のインデックスを持つ。
>>> s = pd.Series(list("abcdef"), index=[49, 48, 47, 0, 1, 2])
49 a
48 b
47 c
0 d
1 e
2 f
>>> s.loc[0] # value at index label 0
'd'
>>> s.iloc[0] # value at index location 0
'a'
>>> s.loc[0:1] # rows at index labels between 0 and 1 (inclusive)
0 d
1 e
>>> s.iloc[0:1] # rows at index location between 0 and 1 (exclusive)
49 a
以下は、「Select」「Select」「Select」の違い/類似点です。
s.loc
と
s.iloc
を使用すると、さまざまなオブジェクトを渡すことができます。
s.loc[<object>]
s.iloc[<object>]
0
単品
インデックスにおける値
ラベル
0
(文字列
'd'
)
インデックスにおける値
位置
0(文字列
'a'
)
0:1
スライス
2つ
行(ラベル
0
と
1
)
一人
行 (位置 0 の最初の行)
1:47
境界外端のスライス
ゼロ
行 (空のシリーズ)
5件
行 (ロケーション 1 以降)
1:47:-1
負のステップを持つスライス
三
行(ラベル
1
に戻る
47
)
ゼロ
行 (空のシリーズ)
[2, 0]
整数値リスト
2つ
与えられたラベルを持つ行
2つ
指定された位置の行
s > 'e'
ブール系列(どの値がそのプロパティを持つかを示す)
一人
行を含む
'f'
)
NotImplementedError
(s>'e').values
ブール配列
一人
行を含む
'f'
)
と同じです。
loc
999
int オブジェクトがインデックスにない
KeyError
IndexError
(圏外)
-1
int オブジェクトがインデックスにない
KeyError
の最後の値を返します。
s
lambda x: x.index[3]
シリーズに適用される callable (ここでは 3 を返している)
rd
の項目)
s.loc[s.index[3]]
s.iloc[s.index[3]]
loc
のラベルクエリ機能は、整数インデックスをはるかに超えて拡張されており、いくつかの追加例を強調する価値があります。
インデックスに文字列オブジェクトが含まれるシリーズを紹介します。
>>> s2 = pd.Series(s.index, index=s.values)
>>> s2
a 49
b 48
c 47
d 0
e 1
f 2
以降
loc
はラベルベースなので、Series の最初の値を
s2.loc['a']
. また、非整数のオブジェクトでスライスすることも可能です。
>>> s2.loc['c':'e'] # all rows lying between 'c' and 'e' (inclusive)
c 47
d 0
e 1
DateTimeインデックスの場合、ラベルで取得するために正確な日時を渡す必要はありません。例えば
>>> s3 = pd.Series(list('abcde'), pd.date_range('now', periods=5, freq='M'))
>>> s3
2021-01-31 16:41:31.879768 a
2021-02-28 16:41:31.879768 b
2021-03-31 16:41:31.879768 c
2021-04-30 16:41:31.879768 d
2021-05-31 16:41:31.879768 e
そして、2021年3月/4月の行を取得するために必要なものは、以下のとおりです。
>>> s3.loc['2021-03':'2021-04']
2021-03-31 17:04:30.742316 c
2021-04-30 17:04:30.742316 d
行と列
loc
そして
iloc
は、DataFrame でも Series と同じように動作します。どちらの方法も、列と行を一緒に扱うことができることに注意してください。
タプルが与えられると、最初の要素が行のインデックスとして使用され、もし存在すれば、2番目の要素が列のインデックスとして使用されます。
以下に定義されたDataFrameを考える。
>>> import numpy as np
>>> df = pd.DataFrame(np.arange(25).reshape(5, 5),
index=list('abcde'),
columns=['x','y','z', 8, 9])
>>> df
x y z 8 9
a 0 1 2 3 4
b 5 6 7 8 9
c 10 11 12 13 14
d 15 16 17 18 19
e 20 21 22 23 24
では、例えば。
>>> df.loc['c': , :'z'] # rows 'c' and onwards AND columns up to 'z'
x y z
c 10 11 12
d 15 16 17
e 20 21 22
>>> df.iloc[:, 3] # all rows, but only the column at index location 3
a 3
b 8
c 13
d 18
e 23
時には、行と列のラベルと位置のインデックス作成方法を混在させ、何らかの方法で
loc
と
iloc
.
例えば、次のようなDataFrameを考えてみましょう。c' までの行をスライスするには、どのようにするのが最適でしょうか。 と は最初の4列を取るか?
>>> import numpy as np
>>> df = pd.DataFrame(np.arange(25).reshape(5, 5),
index=list('abcde'),
columns=['x','y','z', 8, 9])
>>> df
x y z 8 9
a 0 1 2 3 4
b 5 6 7 8 9
c 10 11 12 13 14
d 15 16 17 18 19
e 20 21 22 23 24
この結果を得るには
iloc
と別のメソッドの助けを借りています。
>>> df.iloc[:df.index.get_loc('c') + 1, :4]
x y z 8
a 0 1 2 3
b 5 6 7 8
c 10 11 12 13
get_loc()
はインデックスメソッドで、quot;このインデックス内のラベルの位置を取得する"を意味します。なお、スライスは
iloc
はその終点を除くので、行 'c' も欲しい場合は、この値に 1 を加える必要があります。
関連
-
[解決済み】お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX AVX2
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] Pandas DataFrameの行数を取得する方法は?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
python implement mysql add delete check change サンプルコード
-
Python百行で韓服サークルの画像クロールを実現する
-
FacebookオープンソースワンストップサービスpythonのタイミングツールKats詳細
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み】TypeError: unhashable type: 'numpy.ndarray'.
-
[解決済み】csv.Error:イテレータはバイトではなく文字列を返すべき
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み】Python elifの構文が無効です【終了しました
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない